7.12 k-Means

ore.odmKM関数はデータベース内のk-Means (KM)アルゴリズムを使用します。このアルゴリズムは、指定した数のクラスタにデータをパーティション化する、距離ベースのクラスタリング・アルゴリズムです。

このアルゴリズムには、次の機能があります。

  • 複数の距離関数(ユークリッド、コサインおよび高速コサインの各距離関数)。デフォルトはユークリッドです。

  • クラスタごとに、アルゴリズムによって、重心、各属性のヒストグラム、およびクラスタに割り当てられるデータの大部分を囲むハイパーボックスを記述するルールが戻されます。重心は、カテゴリ属性については最頻値を、数値属性については平均および分散をレポートします。

ore.odmKM関数の引数の詳細は、help(ore.odmKM)をコールしてください。

k-Meansモデルの設定

次の表に、k-Meansモデルに適用される設定を示します。

表7-11 k-Meansモデルの設定

設定名 設定値 説明

KMNS_CONV_TOLERANCE

TO_CHAR(0 < X < 1)

k-Meansの最小収束許容値。最小収束許容値を満たすか、KMNS_ITERATIONSで指定された最大反復数に到達するまで、アルゴリズムは反復します。

収束許容値が減少すると、ソリューションはより正確になりますが、実行時間が長くなることがあります。

デフォルトの収束許容値は、0.001です。

KMNS_DISTANCE

KMNS_COSINE

KMNS_EUCLIDEAN

k-Meansの距離関数。

デフォルトの距離ファンクションはKMNS_EUCLIDEANです。

KMNS_ITERATIONS

TO_CHAR(X > 0)

k-Meansの最大反復数。最大反復数に到達するか、KMNS_CONV_TOLERANCEで指定された最小収束許容値を満たすまで、アルゴリズムは反復します。

デフォルトの反復回数は20です。

KMNS_MIN_PCT_ATTR_SUPPORT

TO_CHAR(0 <= X <= 1)

クラスタのルール記述にその属性を含めるために必要な、非NULL値でなければならない属性値の最小パーセント。

データがまばらであったり多くの欠損値を含んでいる場合、最小支持度が高すぎると非常に短いルールまたは空のルールになる可能性があります。

デフォルトの最小支持度は、0.1です。

KMNS_NUM_BINS

TO_CHAR(X > 0)

k-Meansで生成される属性ヒストグラムでのビンの数。各属性のビン境界は、トレーニング・データセット全体でグローバルに計算されます。ビニングの方法は等幅です。ただ1つのビンを持つ単一値が含まれる属性を除き、すべての属性は同じ数のビンを持ちます。

デフォルトのヒストグラム・ビン数は11です。

KMNS_SPLIT_CRITERION

KMNS_SIZE

KMNS_VARIANCE

k-Meansの分割基準。分割基準は、新しいk-Meansクラスタの初期化を制御します。アルゴリズムがバイナリ・ツリーを作成し、同時に新しいクラスタを1つ追加します。

分割基準がサイズに基づいている場合、新しいクラスタは現在最も大きなクラスタのある領域に置かれます。分割基準が分散値に基づいている場合、新しいクラスタは最も拡大されたクラスタの領域に置かれます。

デフォルトの分割基準はKMNS_VARIANCEです。

KMNS_RANDOM_SEED

X >= 0

この設定により、k-Meansの初期化中に使用されるランダム・ジェネレータのシードを制御します。これは、負でない整数である必要があります。

デフォルトは0です。

KMNS_DETAILS

KMNS_DETAILS_NONE

KMNS_DETAILS_HIERARCHY

KMNS_DETAILS_ALL

この設定により、作成中に計算されるクラスタ詳細のレベルが決まります。

KMNS_DETAILS_NONE: クラスタ詳細は計算されません。スコアリング情報のみが永続化されます。

KMNS_DETAILS_HIERARCHY: クラスタ階層とクラスタ・レコード数が計算されます。これはデフォルト値です。

KMNS_DETAILS_ALL: クラスタ階層、レコード数および記述統計(平均値、分散値、最頻値、ヒストグラムおよびルール)が計算されます。

KMNS_WINSORIZE

ノート:

Oracle Database 23aiでのみ使用できます。

KMNS_WINSORIZE_ENABLE

KMNS_WINSORIZE_DISABLE

データをウィンザライズするには、このパラメータを有効または無効にします。ウィンザライズが有効な場合、平均値の周囲の6つの標準偏差のウィンドウ・サイズでデータが制限されます。この機能は、AUTO_DATA_PREPONおよびOFFにして使用できます。範囲外の値は、間隔の端の値に置き換えられます。ウィンザライズはデフォルトでは有効になっていません。

ノート:

ウィンザライズは、 KMNS_EUCLIDEAN距離関数が使用されている場合にのみ使用できます。ウィンザライズが有効になっていて、他の距離ファンクションが設定されている場合は、例外が発生します。

例7-14 ore.odmKMeans関数の使用方法

この例では、ore.odmKMeans関数の使用方法を示します。この例では、100行および2列を含むマトリクスを2つ作成します。行の値は無作為変量です。それらのマトリクスをmatrix xにバインドした後、xdata.frameに強制変換し、それをore.frameオブジェクトであるx_ofとしてデータベースにプッシュします。この例では次に、ore.odmKMeans関数をコールして、KMモデルのkm.mod1を構築します。その後、summary関数およびhistogram関数をそのモデルでコールします。図7-2に、histogram関数で表示されるグラフを示します。

この例では最後に、そのモデルを使用して予測を行い、結果をローカル・メモリーにプルして、結果を表示します。図7-3に、points関数で表示されるグラフを示します。

x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
           matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(x) <- c("x", "y")
x_of <- ore.push (data.frame(x))
km.mod1 <- NULL
km.mod1 <- ore.odmKMeans(~., x_of, num.centers=2)
summary(km.mod1)
histogram(km.mod1)
# Make a prediction.
km.res1 <- predict(km.mod1, x_of, type="class", supplemental.cols=c("x","y"))
head(km.res1, 3)
# Pull the results to the local memory and plot them.
km.res1.local <- ore.pull(km.res1)
plot(data.frame(x=km.res1.local$x, y=km.res1.local$y),
                col=km.res1.local$CLUSTER_ID)
points(km.mod1$centers2, col = rownames(km.mod1$centers2), pch = 8, cex=2)
head(predict(km.mod1, x_of, type=c("class","raw"),
             supplemental.cols=c("x","y")), 3)
この例のリスト
R> x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
+             matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
R> colnames(x) <- c("x", "y")
R> x_of <- ore.push (data.frame(x))
R> km.mod1 <- NULL
R> km.mod1 <- ore.odmKMeans(~., x_of, num.centers=2)
R> summary(km.mod1)
 
Call:
ore.odmKMeans(formula = ~., data = x_of, num.centers = 2)
 
Settings: 
                         value
clus.num.clusters            2
block.growth                 2
conv.tolerance            0.01
distance             euclidean
iterations                   3
min.pct.attr.support       0.1
num.bins                    10
split.criterion       variance
prep.auto                   on
 
Centers: 
            x           y
2  0.99772307  0.93368684
3 -0.02721078 -0.05099784
R> histogram(km.mod1)
R> # Make a prediction.
R> km.res1 <- predict(km.mod1, x_of, type="class", supplemental.cols=c("x","y"))
R> head(km.res1, 3)
            x          y CLUSTER_ID
1 -0.03038444  0.4395409          3
2  0.17724606 -0.5342975          3
3 -0.17565761  0.2832132          3
# Pull the results to the local memory and plot them.
R> km.res1.local <- ore.pull(km.res1)
R> plot(data.frame(x=km.res1.local$x, y=km.res1.local$y),
+                  col=km.res1.local$CLUSTER_ID)
R> points(km.mod1$centers2, col = rownames(km.mod1$centers2), pch = 8, cex=2)
R> head(predict(km.mod1, x_of, type=c("class","raw"),
                supplemental.cols=c("x","y")), 3)
           '2'       '3'           x          y CLUSTER_ID
1 8.610341e-03 0.9913897 -0.03038444  0.4395409          3
2 8.017890e-06 0.9999920  0.17724606 -0.5342975          3
3 5.494263e-04 0.9994506 -0.17565761  0.2832132          3

図7-2に、例7-14histogram関数の呼出しで表示されるグラフを示します。

図7-2 km.mod1モデルのクラスタ・ヒストグラム

図7-2の説明を次に示します
「図7-2 km.mod1モデルのクラスタ・ヒストグラム」の説明

図7-3に、例7-14points関数の呼出しで表示されるグラフを示します。

図7-3 km.mod1モデルのpoints関数の結果

図7-3の説明が続きます
「図7-3 km.mod1モデルのpoints関数の結果」の説明