BICクラスタリング基準の計算(K平均後のクラスターを検証するため)


9

Rのk平均値出力について、BIC式に基づいてクラスタリング基準を計算する良い方法があるかどうか疑問に思っていますか?他のクラスタリングモデルと比較できるように、そのBICを計算する方法について少し混乱しています。現在、k-meansのstatsパッケージ実装を使用しています。


この基準はk-meansで使用するように設計されていることに注意してください。異なるアルゴリズムによって取得されたクラスタリングでは、不適切である可能性があります(特に密度ベースのクラスタリングアルゴリズムの場合)
QUITあり-Anony-Mousse 2013

回答:


6

kmeans結果のBICを計算するために、以下の方法をテストしました。

  1. 次の式は次の式から得られます:[ref2] ここに画像の説明を入力してください

上記の式のrコードは次のとおりです。

  k3 <- kmeans(mt,3)
  intra.mean <- mean(k3$within)
  k10 <- kmeans(mt,10)
  centers <- k10$centers
  BIC <- function(mt,cls,intra.mean,centers){
    x.centers <- apply(centers,2,function(y){
      as.numeric(y)[cls]
    })
    sum1 <- sum(((mt-x.centers)/intra.mean)**2)
    sum1 + NCOL(mt)*length(unique(cls))*log(NROW(mt))
  }
#

問題は、上記のrコードを使用すると、計算されたBICが単調増加していたことです。どういう理由ですか?

ここに画像の説明を入力してください

[ref2]ラムジー、SA、等。(2008)。「モチーフスキャンと発現ダイナミクスからの証拠を統合することにより、マクロファージ転写プログラムを明らかにする。」PLoS Comput Biol 4(3):e1000021。

  1. 私は/programming/15839774/how-to-calculate-bic-for-k-means-clustering-in-rからの新しい式を使用しました

    BIC2 <- function(fit){
    m = ncol(fit$centers)
        n = length(fit$cluster)
    k = nrow(fit$centers)
        D = fit$tot.withinss
    return(data.frame(AIC = D + 2*m*k,
                      BIC = D + log(n)*m*k))
    }

この方法では、クラスター番号155で最小のBIC値が得られました。 ここに画像の説明を入力してください

  1. @ttnphnsが提供するメソッドを使用して、対応するRコードを以下にリストします。しかし、問題はVcとVの違いは何ですか?また、長さが異なる2つのベクトルの要素ごとの乗算を計算する方法は?

    BIC3 <- function(fit,mt){
    Nc <- as.matrix(as.numeric(table(fit$cluster)),nc=1)
    Vc <- apply(mt,2,function(x){
        tapply(x,fit$cluster,var)
     })
    V <- matrix(rep(apply(mt,2,function(x){
    var(x)
    }),length(Nc)),byrow=TRUE,nrow=length(Nc))
    LL = -Nc * colSums( log(Vc + V)/2 ) ##how to calculate this? elementa-wise multiplication for two vectors with different length?
    BIC = -2 * rowSums(LL) + 2*K*P * log(NRoW(mt))
    return(BIC)
    }

1
おそらくあなたは何か違うことをしていました。それは、私の「疑似コード」でVcP x Kマトリックスであると述べられてVおり、同じサイズのマトリックスにK回伝搬された列でした。したがって、(私の答えのポイント4)を追加できVc+Vます。次に、対数を取り、2で割り、列の合計を計算します。結果の行ベクトルは、rowと(値ごとに、つまり要素ごとに)乗算されますNc
ttnphns 2016年

1
私は自分の答えに数式自体を追加したので、あなたがしていることがそれであるかどうかを比較して言うことができます。
ttnphns

3

私はRを使用していませんが、ここに、任意のクラスタリングソリューションのBICまたはAICクラスタリング基準の値を計算するのに役立つスケジュールを示します。

このアプローチは、SPSSアルゴリズムの2段階のクラスター分析に従います(「クラスターの数」の章から始まり、そこで「対数尤度距離」に移動して、対数尤度ksiが定義されている式を参照してください)。BIC(またはAIC)は、対数尤度距離に基づいて計算されています。定量データのみの計算を以下に示します(SPSSドキュメントで指定された式はより一般的で、カテゴリカルデータも組み込んでいます。定量データの「部分」のみを説明しています)。

X is data matrix, N objects x P quantitative variables.
Y is column of length N designating cluster membership; clusters 1, 2,..., K.
1. Compute 1 x K row Nc showing number of objects in each cluster.
2. Compute P x K matrix Vc containing variances by clusters.
   Use denominator "n", not "n-1", to compute those, because there may be clusters with just one object.
3. Compute P x 1 column containing variances for the whole sample. Use "n-1" denominator.
   Then propagate the column to get P x K matrix V.
4. Compute log-likelihood LL, 1 x K row. LL = -Nc &* csum( ln(Vc + V)/2 ),
   where "&*" means usual, elementwise multiplication;
   "csum" means sum of elements within columns.
5. Compute BIC value. BIC = -2 * rsum(LL) + 2*K*P * ln(N),
   where "rsum" means sum of elements within row.
6. Also could compute AIC value. AIC = -2 * rsum(LL) + 4*K*P

Note: By default SPSS TwoStep cluster procedure standardizes all
quantitative variables, therefore V consists of just 1s, it is constant 1.
V serves simply as an insurance against ln(0) case.

AICおよびBICクラスタリング基準は、K平均クラスタリングだけでなく使用されます。これらは、クラスター内密度をクラスター内分散として扱う任意のクラスター化方法に役立ちます。AICとBICは「過剰なパラメーター」に対してペナルティを課すため、クラスターが少ないソリューションを優先する傾向があります。「クラスターが互いにより分離されていないこと」が彼らのモットーかもしれません。

BIC / AICクラスタリング基準にはさまざまなバージョンがあります。ここで示したものはVc、クラスター内分散を対数尤度の主要な用語として使用しています。他のバージョンは、おそらくk平均クラスタリングに適しているかもしれませんが、対数尤度はクラスター内の二乗和に基づいている可能性があります。

私が参照した同じSPSSドキュメントのPDFバージョン

そして最後に、上記の擬似コードとドキュメントに対応する数式自体があります。これは、私がSPSSユーザー向けに作成した関数(マクロ)の説明から引用したものです。数式を改善するための提案がある場合は、コメントまたは回答を投稿してください。

ここに画像の説明を入力してください


ttnphns、ご回答ありがとうございます。クラスタ内の平方和を最小化する目的関数に関してこれを説明できるかどうか疑問に思いますか?
UnivStudent 2013

σe2VcVc+VVcVc=0

私の頭が吹くと、これを使用して凝集型階層クラスタリングを停止する方法を理解できません。私は、文書クラスタリングレコードリンケージの問題のためにそれを使用しています
MonsterMMORPG

@ Monster、100以上のさまざまな内部クラスタリング[検証]基準があります。BICはその1つです。最後までクラスタリングを行い、すべてのステップでクラスターソリューション、クラスターメンバーシップ変数を保存します。まあ、おそらく多くの小さなクラスターは必要ないので、最後の10または20ステップでのみ保存してください。クラスタリング基準でソリューションを比較し、1〜3個の「最良の」ソリューションを選択します。それらを解釈可能性について比較します。できました。例を参照してください。
ttnphns 2015

@ttnphnsここでの問題は、これらのいわゆる100以上の内部クラスタリング検証のものの実際のデータ例を見つけることができません。私が理解できないいくつかの数学の方程式を見つけることができます。これはまた、これらのアルゴリズムが実際に存在することを信じさせないようにします:D
MonsterMMORPG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.