9.10 期待値最大化
oml.emクラスは、期待値の最大化(EM)アルゴリズムを使用してクラスタリング・モデルを作成します。 
               
EMは、確率的クラスタリングを実行する密度推定アルゴリズムです。密度推定の目的は、所与の母集団がどのように分布しているかを取得する密度関数を構成することです。密度推定値は、母集団のサンプルを表現する観測済データに基づく。
oml.emクラスのメソッドの詳細は、help(oml.em)を呼び出すか、Oracle Machine Learning for Python APIリファレンスを参照してください。
               
期待値の最大化モデルの設定
次の表は、EMモデルのデータの準備と分析に関する設定のリストです。
                  
表9-5 データ準備と分析用の期待値最大化設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
| EMCS_ATTRIBUTE_FILTER | 
 
 | モデルに相関していない属性を含めるかどうかの指定。 ノート: この設定は、ネストしていない属性にのみ適用されます。 デフォルト値は、システムによって決定されます。 | 
| EMCS_MAX_NUM_ATTR_2D | 
 | モデルに含める相関属性の最大数。 ノート:この設定は、ネストしていない(2D)属性にのみ適用されます。 デフォルト値は | 
| 
 | 
 
 
 | 量的属性をモデリングする分布。入力表または入力ビューの全体に適用され、属性ごとの指定は許可されません。 オプションには、ベルヌーイ分布、ガウス分布またはシステム決定の分布が含まれます。ベルヌーイ分布やガウス分布を選択した場合、すべての量的属性が同じタイプの分布を使用してモデリングされます。システム決定の分布の場合は、個々の属性で、データに応じて異なる分布(ベルヌーイ分布またはガウス分布)を使用できます。 デフォルト値は | 
| 
 | 
 | 量的列のクラスタ統計を収集するために使用される等幅ビンの数。 デフォルト値は、 | 
| 
 | 
 | ネストした各列に使用する予測の数を指定します。指定した数の予測よりも列の個別属性の数が少ない場合、データの予測は行われません。この設定は、すべてのネストしている列に適用されます。 デフォルト値は | 
| 
 | 
 | 複数値のベルヌーイ分布で量的列のモデリングに使用するクオンタイル・ビンの数を指定します。 デフォルト値は、システムによって決定されます。 | 
| 
 | 
 | 複数値のベルヌーイ分布で質的列のモデリングに使用する上位Nビンの数を指定します。 デフォルト値は、システムによって決定されます。 | 
次の表は、EMモデルの学習に関する設定のリストです。
表9-6 学習用の期待値最大化設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
| 
 | 
 
 | EMの収束基準。収束基準は、取り分けておいたデータセットに基づいている場合もあれば、ベイズ情報量基準である場合もあります。 デフォルト値は、システムによって決定されます。 | 
| 
 | 
 | 収束基準が取り分けておいたデータ・セットに基づいている場合( | 
| 
 | 
 
 | 様々なモデル・サイズが探索され、最適なサイズが選択されるモデル検索をEMで有効にします。 デフォルト値は | 
| 
 | 
 | モデル内のコンポーネントの最大数。モデル検索が有効である場合、アルゴリズムによってコンポーネントの数(尤度ファンクションの改善度または正則化に基づいた指定された最大数まで)が自動的に決定されます。 コンポーネントの数は、クラスタの数以上である必要があります。 デフォルト値は20です。 | 
| 
 | 
 | EMアルゴリズムにおける最大反復数を指定します。 デフォルト値は | 
| 
 | 負でない整数 | EMで使用されるランダム・ジェネレータのシードを制御します。デフォルト値は | 
| 
 | 
 
 | EMアルゴリズムにソリューションからの小さいコンポーネントの削除を許可します。 デフォルト値は | 
次の表は、EMモデルのコンポーネント・クラスタリングに関する設定のリストです。
表9-7 コンポーネント・クラスタリング用の期待値最大化設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
| CLUS_NUM_CLUSTERS | 
 | アルゴリズムによって生成されるリーフ・クラスタの最大数。このアルゴリズムは、データによっては、指定した数よりも少ないクラスタを返す場合がありますが、アルゴリズム固有の設定によって制御されるコンポーネント数を超えるクラスタを返すことはできません。(表9-6を参照。)これらの設定によっては、コンポーネントよりも少ないクラスタが存在する場合があります。コンポーネントのクラスタリングが無効な場合、クラスタの数はコンポーネントの数に等しくなります。 デフォルト値は、システムによって決定されます。 | 
| 
 | 
 
 | EMコンポーネントの上位レベルのクラスタへのグループ化を有効または無効にします。無効にすると、コンポーネント自体がクラスタとして扱われます。 コンポーネント・クラスタリングを有効にすると、SQL  デフォルト値は | 
| 
 | 
 | EMコンポーネントのクラスタリングを制御する相違点のしきい値。相違点メジャーがしきい値よりも少ない場合、複数のコンポーネントは1つのクラスタに結合されます。 しきい値が低いと、よりコンパクトな多くのクラスタが作成されます。しきい値が高いと、より広く散らばった少数のクラスタが作成されます。 デフォルト値は | 
| 
 | 
 
 
 | 凝集クラスタリング・ステップにおけるリンケージ機能の指定を許可します。 
 
 
 デフォルト値は | 
次の表は、EMモデルのクラスタ統計に関する設定のリストです。
表9-8 クラスタ統計用の期待値最大化設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
| 
 | 
 
 | クラスタ(セントロイド、ヒストグラムおよびルール)の記述統計の収集を有効または無効にします。統計を無効にすると、モデル・サイズが縮小されます。 デフォルト値は | 
| 
 | 
 | クラスタ・ルールに属性を含めるときに必要とされる最小限のサポート。このサポートでは、クラスタに割り当てられたデータ行のうち、属性がnull以外の値である必要があるものの割合を示します。 デフォルト値は | 
関連項目:
例9-10 oml.emクラスの使用
この例では、EMモデルを作成し、oml.emクラスのメソッドの一部を使用します。 
                  
import oml
import pandas as pd
from sklearn import datasets 
# Load the iris data set and create a pandas.DataFrame for it.
iris = datasets.load_iris()
x = pd.DataFrame(iris.data,
                 columns = ['Sepal_Length','Sepal_Width',
                            'Petal_Length','Petal_Width'])
y = pd.DataFrame(list(map(lambda x:
                           {0: 'setosa', 1: 'versicolor',
                            2:'virginica'}[x], iris.target)),
                 columns = ['Species'])
try:
    oml.drop('IRIS')
except: 
    pass
# Create the IRIS database table and the proxy object for the table.
oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
# Create training and test data.
dat = oml.sync(table = 'IRIS').split()
train_dat = dat[0]
test_dat = dat[1]
# Specify settings.
setting = {'emcs_num_iterations': 100}
# Create an EM model object
em_mod = oml.em(n_clusters = 2, **setting)
# Fit the EM model according to the training data and parameter
# settings.
em_mod = em_mod.fit(train_dat)
# Show details of the model.
em_mod
# Use the model to make predictions on the test data.
em_mod.predict(test_dat)
# Make predictions and return the probability for each class
# on new data.
em_mod.predict_proba(test_dat, 
  supplemental_cols = test_dat[:, 
    ['Sepal_Length', 'Sepal_Width', 
     'Petal_Length']]).sort_values(by = ['Sepal_Length', 
       'Sepal_Width',  'Petal_Length', 
       'PROBABILITY_OF_2', 'PROBABILITY_OF_3'])
# Change the random seed and refit the model.
em_mod.set_params(EMCS_RANDOM_SEED = '5').fit(train_dat)この例のリスト
>>> import oml
>>> import pandas as pd
>>> from sklearn import datasets
>>>
>>> # Load the iris data set and create a pandas.DataFrame for it.
... iris = datasets.load_iris()
>>> x = pd.DataFrame(iris.data, 
...                  columns = ['Sepal_Length','Sepal_Width',
...                             'Petal_Length','Petal_Width'])
>>> y = pd.DataFrame(list(map(lambda x: 
...                            {0: 'setosa', 1: 'versicolor', 
...                             2:'virginica'}[x], iris.target)), 
...                  columns = ['Species'])
>>>
>>> try:
...    oml.drop('IRIS')
... except: 
...    pass
>>>
>>> # Create the IRIS database table and the proxy object for the table.
... oml_iris = oml.create(pd.concat([x, y], axis=1), table = 'IRIS')
>>>
>>> # Create training and test data.
... dat = oml.sync(table = 'IRIS').split()
>>> train_dat = dat[0]
>>> test_dat = dat[1]
>>> 
>>> # Specify settings.
... setting = {'emcs_num_iterations': 100}
>>> 
>>> # Create an EM model object.
... em_mod = oml.em(n_clusters = 2, **setting)
>>> 
>>> # Fit the EM model according to the training data and parameter
... # settings.
>>> em_mod = em_mod.fit(train_dat)
>>> 
>>> # Show details of the model.
... em_mod
Algorithm Name: Expectation Maximization
Mining Function: CLUSTERING
Settings: 
                    setting name                  setting value
0                      ALGO_NAME  ALGO_EXPECTATION_MAXIMIZATION
1              CLUS_NUM_CLUSTERS                              2
2        EMCS_CLUSTER_COMPONENTS       EMCS_CLUSTER_COMP_ENABLE
3        EMCS_CLUSTER_STATISTICS         EMCS_CLUS_STATS_ENABLE
4            EMCS_CLUSTER_THRESH                              2
5          EMCS_LINKAGE_FUNCTION            EMCS_LINKAGE_SINGLE
6       EMCS_LOGLIKE_IMPROVEMENT                           .001
7           EMCS_MAX_NUM_ATTR_2D                             50
8      EMCS_MIN_PCT_ATTR_SUPPORT                             .1
9              EMCS_MODEL_SEARCH      EMCS_MODEL_SEARCH_DISABLE
10           EMCS_NUM_COMPONENTS                             20
11         EMCS_NUM_DISTRIBUTION          EMCS_NUM_DISTR_SYSTEM
12       EMCS_NUM_EQUIWIDTH_BINS                             11
13           EMCS_NUM_ITERATIONS                            100
14          EMCS_NUM_PROJECTIONS                             50
15              EMCS_RANDOM_SEED                              0
16        EMCS_REMOVE_COMPONENTS       EMCS_REMOVE_COMPS_ENABLE
17                  ODMS_DETAILS                    ODMS_ENABLE
18  ODMS_MISSING_VALUE_TREATMENT        ODMS_MISSING_VALUE_AUTO
19                 ODMS_SAMPLING          ODMS_SAMPLING_DISABLE
20                     PREP_AUTO                             ON
Computed Settings: 
                 setting name             setting value
0       EMCS_ATTRIBUTE_FILTER  EMCS_ATTR_FILTER_DISABLE
1  EMCS_CONVERGENCE_CRITERION        EMCS_CONV_CRIT_BIC
2      EMCS_NUM_QUANTILE_BINS                         3
3          EMCS_NUM_TOPN_BINS                         3
Global Statistics: 
       attribute name  attribute value
0           CONVERGED              YES
1       LOGLIKELIHOOD         -2.10044
2        NUM_CLUSTERS                2
3      NUM_COMPONENTS                8
4            NUM_ROWS              104
5         RANDOM_SEED                0
6  REMOVED_COMPONENTS               12
Attributes: 
Petal_Length
Petal_Width
Sepal_Length
Sepal_Width
Species
Partition: NO
Clusters: 
   CLUSTER_ID  CLUSTER_NAME  RECORD_COUNT  PARENT  TREE_LEVEL \
0           1             1           104     NaN           1  
1           2             2            68     1.0           2
2           3             3            36     1.0           2
  LEFT_CHILD_ID  RIGHT_CHILD_ID
0           2.0             3.0
1           NaN             NaN
2           NaN             NaN
Taxonomy: 
   PARENT_CLUSTER_ID  CHILD_CLUSTER_ID
0                  1               2.0
1                  1               3.0
2                  2               NaN
3                  3               NaN
Centroids: 
    CLUSTER_ID ATTRIBUTE_NAME      MEAN  MODE_VALUE  VARIANCE
0            1   Petal_Length  3.721154        None  3.234694
1            1    Petal_Width  1.155769        None  0.567539
2            1   Sepal_Length  5.831731        None  0.753255
3            1    Sepal_Width  3.074038        None  0.221358
4            1        Species       NaN      setosa       NaN
5            2   Petal_Length  4.902941        None  0.860588
6            2    Petal_Width  1.635294        None  0.191572
7            2   Sepal_Length  6.266176        None  0.545555
8            2    Sepal_Width  2.854412        None  0.128786
9            2        Species       NaN  versicolor       NaN
10           3   Petal_Length  1.488889        None  0.033016
11           3    Petal_Width  0.250000        None  0.012857
12           3   Sepal_Length  5.011111        None  0.113016
13           3    Sepal_Width  3.488889        None  0.134159
14           3        Species       NaN      setosa       NaN
Leaf Cluster Counts: 
   CLUSTER_ID  CNT
0           2   68
1           3   36
Attribute Importance: 
  ATTRIBUTE_NAME  ATTRIBUTE_IMPORTANCE_VALUE  ATTRIBUTE_RANK
0   Petal_Length                    0.558311               2
1    Petal_Width                    0.556300               3
2   Sepal_Length                    0.469978               4
3    Sepal_Width                    0.196211               5
4        Species                    0.612463               1
Components: 
   COMPONENT_ID  CLUSTER_ID  PRIOR_PROBABILITY
0             1           2           0.115366
1             2           2           0.079158
2             3           3           0.113448
3             4           2           0.148059
4             5           3           0.126979
5             6           2           0.134402
6             7           3           0.105727
7             8           2           0.176860
Cluster Hists: 
     cluster.id            variable  bin.id  lower.bound  upper.bound  \
0             1        Petal_Length       1         1.00         1.59   
1             1        Petal_Length       2         1.59         2.18   
2             1        Petal_Length       3         2.18         2.77   
3             1        Petal_Length       4         2.77         3.36
...          ...                 ...     ...          ...          ...    
137           3         Sepal_Width      11          NaN          NaN   
138           3     Species:'Other'       1          NaN          NaN   
139           3      Species:setosa       2          NaN          NaN   
140           3  Species:versicolor       3          NaN          NaN   
         label  count  
0       1:1.59     25  
1    1.59:2.18     11  
2    2.18:2.77      0  
3    2.77:3.36      3  
...        ...    ...
137          :      0  
138          :      0  
139          :     36  
140          :      0  
[141 rows x 7 columns]
Rules: 
    cluster.id  rhs.support  rhs.conf  lhr.support  lhs.conf       lhs.var  \
0            1          104  1.000000           93  0.892157   Sepal_Width   
1            1          104  1.000000           93  0.892157   Sepal_Width   
2            1          104  1.000000           99  0.892157  Petal_Length   
3            1          104  1.000000           99  0.892157  Petal_Length   
...        ...          ...       ...          ...       ...           ...
26           3           36  0.346154           36  0.972222  Petal_Length 
27           3           36  0.346154           36  0.972222  Sepal_Length   
28           3           36  0.346154           36  0.972222  Sepal_Length   
29           3           36  0.346154           36  0.972222       Species   
    lhs.var.support  lhs.var.conf              predicate  
0                93      0.400000    Sepal_Width <= 3.92  
1                93      0.400000     Sepal_Width > 2.48  
2                93      0.222222   Petal_Length <= 6.31  
3                93      0.222222      Petal_Length >= 1  
...             ...           ...                    ...  
26               35      0.134398      Petal_Length >= 1  
27               35      0.094194    Sepal_Length <= 5.74  
28               35      0.094194     Sepal_Length >= 4.3  
29               35      0.281684        Species = setosa 
[30 rows x 9 columns]
>>> # Use the model to make predictions on the test data.
... em_mod.predict(test_dat)
    CLUSTER_ID
0            3
1            3
2            3
3            3
...        ...
42           2
43           2
44           2
45           2
>>> # Make predictions and return the probability for each class
... # on new data.
>>> em_mod.predict_proba(test_dat, 
...   supplemental_cols = test_dat[:, 
...     ['Sepal_Length', 'Sepal_Width', 
...      'Petal_Length']]).sort_values(by = ['Sepal_Length', 
...        'Sepal_Width',  'Petal_Length', 
...        'PROBABILITY_OF_2', 'PROBABILITY_OF_3'])
    Sepal_Length  Sepal_Width  Petal_Length  PROBABILITY_OF_2  \
0            4.4          3.0           1.3      4.680788e-20   
1            4.4          3.2           1.3      1.052071e-20   
2            4.5          2.3           1.3      7.751240e-06  
3            4.8          3.4           1.6      5.363418e-19   
...          ...          ...           ...               ...   
43           6.9          3.1           4.9      1.000000e+00   
44           6.9          3.1           5.4      1.000000e+00   
45           7.0          3.2           4.7      1.000000e+00   
    PROBABILITY_OF_3  
0       1.000000e+00  
1       1.000000e+00  
2       9.999922e-01  
3       1.000000e+00  
...              ...  
43     3.295578e-97  
44    6.438740e-137 
45     3.853925e-89  
  
>>> 
>>> # Change the random seed and refit the model.
... em_mod.set_params(EMCS_RANDOM_SEED = '5').fit(train_dat)
Algorithm Name: Expectation Maximization
Mining Function: CLUSTERING
Settings: 
                    setting name                  setting value
0                      ALGO_NAME  ALGO_EXPECTATION_MAXIMIZATION
1              CLUS_NUM_CLUSTERS                              2
2        EMCS_CLUSTER_COMPONENTS       EMCS_CLUSTER_COMP_ENABLE
3        EMCS_CLUSTER_STATISTICS         EMCS_CLUS_STATS_ENABLE
4            EMCS_CLUSTER_THRESH                              2
5          EMCS_LINKAGE_FUNCTION            EMCS_LINKAGE_SINGLE
6       EMCS_LOGLIKE_IMPROVEMENT                           .001
7           EMCS_MAX_NUM_ATTR_2D                             50
8      EMCS_MIN_PCT_ATTR_SUPPORT                             .1
9              EMCS_MODEL_SEARCH      EMCS_MODEL_SEARCH_DISABLE
10           EMCS_NUM_COMPONENTS                             20
11         EMCS_NUM_DISTRIBUTION          EMCS_NUM_DISTR_SYSTEM
12       EMCS_NUM_EQUIWIDTH_BINS                             11
13           EMCS_NUM_ITERATIONS                            100
14          EMCS_NUM_PROJECTIONS                             50
15              EMCS_RANDOM_SEED                              5
16        EMCS_REMOVE_COMPONENTS       EMCS_REMOVE_COMPS_ENABLE
17                  ODMS_DETAILS                    ODMS_ENABLE
18  ODMS_MISSING_VALUE_TREATMENT        ODMS_MISSING_VALUE_AUTO
19                 ODMS_SAMPLING          ODMS_SAMPLING_DISABLE
20                     PREP_AUTO                             ON
Computed Settings: 
                 setting name             setting value
0       EMCS_ATTRIBUTE_FILTER  EMCS_ATTR_FILTER_DISABLE
1  EMCS_CONVERGENCE_CRITERION        EMCS_CONV_CRIT_BIC
2      EMCS_NUM_QUANTILE_BINS                         3
3          EMCS_NUM_TOPN_BINS                         3
Global Statistics: 
       attribute name  attribute value
0           CONVERGED              YES
1       LOGLIKELIHOOD         -1.75777
2        NUM_CLUSTERS                2
3      NUM_COMPONENTS                9
4            NUM_ROWS              104
5         RANDOM_SEED                5
6  REMOVED_COMPONENTS               11
Attributes: 
Petal_Length
Petal_Width
Sepal_Length
Sepal_Width
Species
Partition: NO
Clusters: 
   CLUSTER_ID  CLUSTER_NAME  RECORD_COUNT  PARENT  TREE_LEVEL  LEFT_CHILD_ID  \
0           1             1           104     NaN           1            2.0   
1           2             2            36     1.0           2            NaN   
2           3             3            68     1.0           2            NaN   
   RIGHT_CHILD_ID  
0             3.0  
1             NaN  
2             NaN  
Taxonomy: 
   PARENT_CLUSTER_ID  CHILD_CLUSTER_ID
0                  1               2.0
1                  1               3.0
2                  2               NaN
3                  3               NaN
Centroids: 
    CLUSTER_ID ATTRIBUTE_NAME      MEAN  MODE_VALUE  VARIANCE
0            1   Petal_Length  3.721154        None  3.234694
1            1    Petal_Width  1.155769        None  0.567539
2            1   Sepal_Length  5.831731        None  0.753255
3            1    Sepal_Width  3.074038        None  0.221358
4            1        Species       NaN      setosa       NaN
5            2   Petal_Length  1.488889        None  0.033016
6            2    Petal_Width  0.250000        None  0.012857
7            2   Sepal_Length  5.011111        None  0.113016
8            2    Sepal_Width  3.488889        None  0.134159
9            2        Species       NaN      setosa       NaN
10           3   Petal_Length  4.902941        None  0.860588
11           3    Petal_Width  1.635294        None  0.191572
12           3   Sepal_Length  6.266176        None  0.545555
13           3    Sepal_Width  2.854412        None  0.128786
14           3        Species       NaN  versicolor       NaN
Leaf Cluster Counts: 
   CLUSTER_ID  CNT
0           2   36
1           3   68
Attribute Importance: 
  ATTRIBUTE_NAME  ATTRIBUTE_IMPORTANCE_VALUE  ATTRIBUTE_RANK
0   Petal_Length                    0.558311               2
1    Petal_Width                    0.556300               3
2   Sepal_Length                    0.469978               4
3    Sepal_Width                    0.196211               5
4        Species                    0.612463               1
Components: 
   COMPONENT_ID  CLUSTER_ID  PRIOR_PROBABILITY
0             1           2           0.113452
1             2           2           0.105727
2             3           3           0.114202
3             4           3           0.086285
4             5           3           0.067294
5             6           2           0.124365
6             7           3           0.126975
7             8           3           0.105761
8             9           3           0.155939
Cluster Hists: 
     cluster.id            variable  bin.id  lower.bound  upper.bound  \
0             1        Petal_Length       1         1.00         1.59   
1             1        Petal_Length       2         1.59         2.18   
2             1        Petal_Length       3         2.18         2.77   
3             1        Petal_Length       4         2.77         3.36   
...         ...                 ...     ...          ...          ...
137           3         Sepal_Width      11          NaN          NaN   
138           3     Species:'Other'       1          NaN          NaN   
139           3      Species:setosa       3          NaN          NaN   
140           3  Species:versicolor       2          NaN          NaN   
         label  count  
0       1:1.59     25 
1    1.59:2.18     11  
2    2.18:2.77      0  
3    2.77:3.36      3  
...        ...    ...
137          :      0 
138          :     33  
139          :      0  
140          :     35  
[141 rows x 7 columns]
Rules: 
    cluster.id  rhs.support  rhs.conf  lhr.support  lhs.conf       lhs.var  \
0            1          104  1.000000           93  0.894231   Sepal_Width   
1            1          104  1.000000           93  0.894231   Sepal_Width   
2            1          104  1.000000           99  0.894231  Petal_Length   
3            1          104  1.000000           99  0.894231  Petal_Length   
...        ...          ...       ...          ...       ...           ...
26           3           68  0.653846           68  0.955882  Sepal_Length   
27           3           68  0.653846           68  0.955882  Sepal_Length   
28           3           68  0.653846           68  0.955882       Species
29           3           68  0.653846           68  0.955882       Species 
    lhs.var.support  lhs.var.conf              predicate  
0                93      0.400000    Sepal_Width <= 3.92  
1                93      0.400000     Sepal_Width > 2.48  
2                93      0.222222   Petal_Length <= 6.31  
3                93      0.222222      Petal_Length >= 1  
...             ...           ...                    ...  
26               65      0.026013    Sepal_Length <= 7.9  
27               65      0.026013    Sepal_Length > 4.66
28               65      0.125809     Species IN 'Other'
29               65      0.125809  Species IN versicolor