7.12 k-Means
ore.odmKM
関数はデータベース内のk-Means (KM)アルゴリズムを使用します。このアルゴリズムは、指定した数のクラスタにデータをパーティション化する、距離ベースのクラスタリング・アルゴリズムです。
このアルゴリズムには、次の機能があります。
-
複数の距離関数(ユークリッド、コサインおよび高速コサインの各距離関数)。デフォルトはユークリッドです。
-
クラスタごとに、アルゴリズムによって、重心、各属性のヒストグラム、およびクラスタに割り当てられるデータの大部分を囲むハイパーボックスを記述するルールが戻されます。重心は、カテゴリ属性については最頻値を、数値属性については平均および分散をレポートします。
ore.odmKM
関数の引数の詳細は、help(ore.odmKM)
をコールしてください。
k-Meansモデルの設定
次の表に、k-Meansモデルに適用される設定を示します。
表7-11 k-Meansモデルの設定
設定名 | 設定値 | 説明 |
---|---|---|
|
|
k-Meansの最小収束許容値。最小収束許容値を満たすか、 収束許容値が減少すると、ソリューションはより正確になりますが、実行時間が長くなることがあります。 デフォルトの収束許容値は、 |
|
|
k-Meansの距離関数。 デフォルトの距離ファンクションは |
|
|
k-Meansの最大反復数。最大反復数に到達するか、 デフォルトの反復回数は |
|
|
クラスタのルール記述にその属性を含めるために必要な、非NULL値でなければならない属性値の最小パーセント。 データがまばらであったり多くの欠損値を含んでいる場合、最小支持度が高すぎると非常に短いルールまたは空のルールになる可能性があります。 デフォルトの最小支持度は、 |
|
|
k-Meansで生成される属性ヒストグラムでのビンの数。各属性のビン境界は、トレーニング・データセット全体でグローバルに計算されます。ビニングの方法は等幅です。ただ1つのビンを持つ単一値が含まれる属性を除き、すべての属性は同じ数のビンを持ちます。 デフォルトのヒストグラム・ビン数は |
|
|
k-Meansの分割基準。分割基準は、新しいk-Meansクラスタの初期化を制御します。アルゴリズムがバイナリ・ツリーを作成し、同時に新しいクラスタを1つ追加します。 分割基準がサイズに基づいている場合、新しいクラスタは現在最も大きなクラスタのある領域に置かれます。分割基準が分散値に基づいている場合、新しいクラスタは最も拡大されたクラスタの領域に置かれます。 デフォルトの分割基準は |
KMNS_RANDOM_SEED |
|
この設定により、k-Meansの初期化中に使用されるランダム・ジェネレータのシードを制御します。これは、負でない整数である必要があります。 デフォルトは |
|
|
この設定により、作成中に計算されるクラスタ詳細のレベルが決まります。
|
ノート: Oracle Database 23aiでのみ使用できます。 |
|
データをウィンザライズするには、このパラメータを有効または無効にします。ウィンザライズが有効な場合、平均値の周囲の6つの標準偏差のウィンドウ・サイズでデータが制限されます。この機能は、 ノート: ウィンザライズは、 KMNS_EUCLIDEAN 距離関数が使用されている場合にのみ使用できます。ウィンザライズが有効になっていて、他の距離ファンクションが設定されている場合は、例外が発生します。
|
例7-14 ore.odmKMeans関数の使用方法
この例では、ore.odmKMeans
関数の使用方法を示します。この例では、100行および2列を含むマトリクスを2つ作成します。行の値は無作為変量です。それらのマトリクスをmatrix
x
にバインドした後、x
をdata.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