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