7.16 直交パーティショニング・クラスタ
ore.odmOC
関数は、直交パーティショニング・クラスタ(O-Cluster)アルゴリズムを使用してデータベース内モデルを構築します。
O-Clusterアルゴリズムは、グリッドベースの階層クラスタリング・モデルを構築しますが、つまり、軸並行な(直行の)パーティションを入力属性空間に作成します。このアルゴリズムは再帰的に作用します。生成される階層構造は、属性空間をクラスタに分割する不規則なグリッドになります。生成されるクラスタは、属性空間内の密度の高い領域を定義します。
クラスタは、属性軸沿いの間隔と、対応する重心およびヒストグラムによって記述されます。sensitivity
引数は、基準となる密度レベルを定義します。最大密度がこの基準水準を上回る領域のみがクラスタとして認識されます。
k-Meansアルゴリズムの場合、自然なクラスタが存在しない可能性があっても、空間を分割します。たとえば、密度が均一な領域がある場合、k-Meansは、その領域をn個のクラスタ(nはユーザーが指定します)に分割します。O-Clusterは、低密度の領域に切断面を配置して、高密度の領域を切り離します。O-Clusterでは、複数の最頻値を持つヒストグラム(ピークと谷)を必要とします。ある領域に、密度が均一または単調に変化している投影がある場合、O-Clusterはその領域をパーティション化しません。
O-Clusterによって発見されたクラスタを使用して、ベイズ確率モデルが生成され、このモデルがpredict
関数によるスコアリングの際に使用され、データ・ポイントをクラスタに割り当てます。生成される確率モデルは混合モデルで、混合要素は、量的属性の独立正規分布と質的属性の多項分布の積によって表されます。
O-Cluster用のデータをユーザー自身が準備する場合は、次の点に留意してください。
-
O-Clusterアルゴリズムでは、モデルを構築する際に、必ずしもすべての入力データを使用するわけではありません。データはバッチで読み込みます(デフォルトのバッチ・サイズは50,000)。統計テストに基づいて、まだ見つかっていないクラスタが存在すると考えられる場合にのみ、別のバッチを読み込みます。
-
O-Clusterは、すべてのデータを読み込むことなくモデルの作成を停止する場合があるので、データをランダム化しておくことをお薦めします。
-
2項属性は、質的属性として宣言する必要があります。O-Clusterは、質的データを数値にマップします。
-
ビンの必要数の概算が自動化されたOML4SQLの等幅ビニング変換を使用することをお薦めします。
-
外れ値が存在すると、クラスタリング・アルゴリズムに大きな影響を与える可能性があります。ビニングまたは正規化を行う前に、クリッピング変換を実行してください。等幅ビニングで外れ値が存在すると、O-Clusterでクラスタを検出できなくなる場合があります。その結果、母集団全体が1つのクラスタ内に含まれているように見えます。
formula
引数の仕様には~ terms
があり、ここでterms
はモデルに含まれる列名です。複数のterms
項目は列名の間に+
を使用することで指定されます。~ .
は、data
のすべての列をモデル構築に使用する場合に使用します。列を除外するには、除外する各列名の前に-
を使用します。
ore.odmOC
関数の引数の詳細は、help(ore.odmOC)
をコールしてください。
直交パーティショニング・クラスタ・モデルの設定
次の表に、直交パーティショニング・クラスタ・モデルに適用される設定を示します。
表7-18 直交パーティショニング・クラスタ・モデルの設定
設定名 | 設定値 | 説明 |
---|---|---|
|
|
新しいクラスタを分割するために必要な最大密度を指定する割合。この割合は、全体の均一密度と関連しています。 デフォルトは |
例7-19 ore.odmOC関数の使用方法
この例では、統合データセットに基づいてO-Clusterモデルを作成します。例の後の図に、生成されるクラスタのヒストグラムを示します。
x <- rbind(matrix(rnorm(100, mean = 4, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 2, sd = 0.3), ncol = 2)) colnames(x) <- c("x", "y") x_of <- ore.push (data.frame(ID=1:100,x)) rownames(x_of) <- x_of$ID oc.mod <- ore.odmOC(~., x_of, num.centers=2) summary(oc.mod) histogram(oc.mod) predict(oc.mod, x_of, type=c("class","raw"), supplemental.cols=c("x","y"))
この例のリスト
R> x <- rbind(matrix(rnorm(100, mean = 4, sd = 0.3), ncol = 2),
+ matrix(rnorm(100, mean = 2, sd = 0.3), ncol = 2))
R> colnames(x) <- c("x", "y")
R> x_of <- ore.push (data.frame(ID=1:100,x))
R> rownames(x_of) <- x_of$ID
R> oc.mod <- ore.odmOC(~., x_of, num.centers=2)
R> summary(oc.mod)
Call:
ore.odmOC(formula = ~., data = x_of, num.centers = 2)
Settings:
value
clus.num.clusters 2
max.buffer 50000
sensitivity 0.5
prep.auto on
Clusters:
CLUSTER_ID ROW_CNT PARENT_CLUSTER_ID TREE_LEVEL DISPERSION IS_LEAF
1 1 100 NA 1 NA FALSE
2 2 56 1 2 NA TRUE
3 3 43 1 2 NA TRUE
Centers:
MEAN.x MEAN.y
2 1.85444 1.941195
3 4.04511 4.111740
R> histogram(oc.mod)
R> predict(oc.mod, x_of, type=c("class","raw"), supplemental.cols=c("x","y"))
'2' '3' x y CLUSTER_ID
1 3.616386e-08 9.999999e-01 3.825303 3.935346 3
2 3.253662e-01 6.746338e-01 3.454143 4.193395 3
3 3.616386e-08 9.999999e-01 4.049120 4.172898 3
# ... Intervening rows not shown.
98 1.000000e+00 1.275712e-12 2.011463 1.991468 2
99 1.000000e+00 1.275712e-12 1.727580 1.898839 2
100 1.000000e+00 1.275712e-12 2.092737 2.212688 2