k-means || 別名スケーラブルなK-Means ++


12

バーマン・バーマニ他 k-means ||が導入されました。これはk-means ++の高速バージョンです。

k-meansの初期化||

このアルゴリズムは、彼らの論文の 4ページ、Bahmani、B.、Moseley、B.、Vattani、A.、Kumar、R.、およびVassilvitskii、S.(2012)から取られています。スケーラブルなk-means ++。VLDB基金の議事録、5(7)、622-633。

残念ながら、これらの派手なギリシャ文字は理解できないので、これがどのように機能するかを理解するのに助けが必要です。私が理解している限り、このアルゴリズムはk-means ++の改良バージョンであり、オーバーサンプリングを使用して反復回数を減らします。k-means++は回反復する必要があります(kは目的のクラスターの数です)。kk

k-means ++がどのように機能するかの具体例を通して非常に良い説明を得ので、同じ例を再び使用します。

次のデータセットがあります。

(7,1)、(3,4)、(1,5)、(5,8)、(1,3)、(7,8)、(8,2)、(5,9)、(8 、0)

(必要なクラスターの数)k=3

(オーバーサンプリング係数)=2

k-means ||のデータセットの例

私はそれを計算し始めましたが、私はそれが正しいかどうかわからず、ステップ2、4、または5については知りません。

  • ステップ1:Xからランダムに点を一様にサンプリングするCX

    のは、最初の重心があるとしましょう(k平均++と同じ)(8,0)

  • ステップ2:ψϕX(C)

    わからない

  • ステップ3:

    • d2(x,C)=[2,41,74,73,58,65,4,90]

      各ポイントに最も近い中心までの距離の2乗を計算します。このケースでは、これまでのところ唯一のセンターを持っている(8,0)

    • d2(x,C)=[4,81,148,146,116,130,8,180]

      (この場合、であるため。)=2

    • cumulative d2(x,C)=[4,85,233,379,495,625,633,813]

      ピックの間隔で乱数を[ 0 813 246.90659.42を選択するとします。彼らは、範囲に入る[ 379 495 )、及び[ 633 813 をそれぞれ4および8の項目に対応しています。=2[0,813)246.90659.42[379,495)[633,813)

    • それを回繰り返しますが、この場合のψ(ステップ2で計算)は何ですか? O(logψ)ψ

  • ステップ4:について、セットW xは内の点の数であることがX近いXにおける任意の他の点よりもCxCwxXxC
  • ステップ5:の重み付きポイントをk個のクラスターに再クラスター化します。Ck

一般的に、またはこの特定の例の助けは素晴らしいでしょう。

回答:


10

データポイント:(7,1)、(3,4)、(1,5)、(5,8)、(1,3)、(7,8)、(8,2)、(5,9) 、(8,0)

l = 2 //オーバーサンプリング係数

k = 3 //いいえ。希望のクラスターの

ステップ1:

最初の重心が is { c 1 } = { CX = { X 1はxは2xは3xは4xは5はxは6xは7xは8 } = { 7 1 3 4 1{c1}={(8,0)}X={x1,x2,x3,x4,x5,x6,x7,x8}={(7,1),(3,4),(1,5),(5,8),(1,3),(7,8),(8,2),(5,9)}

ステップ2:

は、セット Xのすべての点から Cのすべての点までのすべての最小2ノルム距離(ユークリッド距離)の合計です。言い換えると、 Xの各点について、 Cの最も近い点までの距離を見つけ、最終的に Xの各点に1つずつ、これらすべての最小距離の合計を計算します。ϕX(C)XCXCX

d 2で表すxiからCの最も近い点までの距離として Cxi)でます。我々は次に有するψ=Σ N I = 1、D2 CXIdC2(xi)xiCψ=i=1ndC2(xi)

ステップ2では、には単一の要素が含まれ(ステップ1を参照)、Xはすべての要素のセットです。したがって、このステップではd 2CXは、単にCの点とxiの間の距離です。したがって、ϕ= n i = 1 | | xic| | 2dC2(xi)Cxiϕ=i=1n||xic||2

l o g ψ = l o g 52.128 = 3.95 = 4 r o u n d e dψ=i=1nd2(xi,c1)=1.41+6.4+8.6+8.54+7.61+8.06+2+9.4=52.128 log(ψ)=log(52.128)=3.95=4(rounded)

ただし、ステップ3では、に複数のポイントが含まれるため、一般式が適用されることに注意してください。C

ステップ3:

以下のためのループが実行される以前に計算しました。log(ψ)

図面はあなたが理解したようなものではありません。描画は独立しています。つまり、各ポイントに対して描画を実行します。したがって、Xの各ポイントに対して、x iとして示されますXXxiから確率を計算します。ここで、lはパラメーターとして与えられた係数であり、d 2x Cは最も近い中心までの距離であり、ϕ XCpx=ld2(x,C)/ϕX(C)ld2(x,C)ϕX(C) 手順2で説明します。

アルゴリズムは単純です:

  • 反復してすべてのx iを見つけるXxi
  • に対してp x iを計算するxipxi
  • 均一数を生成するよりも小さい場合、P xはiが形成することを選択してCを'[0,1]pxiC
  • あなたが行われた後、すべてはから選択された点などが描きCをCC

反復で実行される各ステップ3(元のアルゴリズムの3行目)で、Xからポイントを選択することを期待していることに注意してください(これは、期待値の式を直接書くと簡単にわかります)。lX

for(int i=0; i<4; i++) {

  // compute d2 for each x_i
  int[] psi = new int[X.size()];
  for(int i=0; i<X.size(); i++) {
    double min = Double.POSITIVE_INFINITY;
    for(int j=0; j<C.size(); j++) {
      if(min>d2(x[i],c[j])) min = norm2(x[i],c[j]);
    }
    psi[i]=min;
  }

  // compute psi
  double phi_c = 0;
  for(int i=0; i<X.size(); i++) phi_c += psi[i];

  // do the drawings
  for(int i=0; i<X.size(); i++) {
    double p_x = l*psi[i]/phi;
    if(p_x >= Random.nextDouble()) {
      C.add(x[i]);
      X.remove(x[i]);
    }
  }
}
// in the end we have C with all centroid candidates
return C;

ステップ4:

wC0XxiXjCw[j]1w

double[] w = new double[C.size()]; // by default all are zero
for(int i=0; i<X.size(); i++) {
  double min = norm2(X[i], C[0]);
  double index = 0;
  for(int j=1; j<C.size(); j++) {
    if(min>norm2(X[i],C[j])) {
      min = norm2(X[i],C[j]);
      index = j;
    }
  }
  // we found the minimum index, so we increment corresp. weight
  w[index]++;
}

ステップ5:

wkkp(i)=w(i)/j=1mwj

for(int k=0; k<K; k++) {
  // select one centroid from candidates, randomly, 
  // weighted by w
  // see kmeans++ and you first idea (which is wrong for step 3)
  ... 
}  

kmeans ++の場合のように、クラスタリングアルゴリズムの通常のフローを使用して、前のすべての手順が続行されます。

私は今より明確であることを望みます。

[後で、後で編集]

著者によって作成されたプレゼンテーションも見つけましたが、各反復で複数のポイントが選択される可能性があることを明確に説明することはできません。プレゼンテーションはこちらです。

[後で@peraの問題を編集]

log(ψ)

Clog(ψ)

もう1つ注意すべきことは、同じページに記載されている次の注意事項です。

実際には、セクション5の実験結果では、優れたソリューションに到達するには数ラウンドで十分であることが示されています。

log(ψ)


私の例の計算で答えを拡張してください。
user1930254

私はプログラマーです。ここに入力するよりも速くコードで書くことができると思います:)。それがアルゴリズムを説明することを願っています。
rapaio

log(Ksi)の反復回数でアイデアを説明してください。私はその下のアイデアを理解していません、反復の数はオブジェクトの値の範囲に依存するようです、これは合理的ではないようです。たとえば、オブジェクトの属性値が約1000である場合、たとえば、エラーが約1000になる可能性があります。これは、3回の反復があることを意味します。一方、値が10の範囲にある場合、エラーは約10であり、1回の反復が発生する可能性があります。反復の回数はオブジェクトの数に依存するべきではありませんか?
マルコ

@peraあなたが提起した問題を明確にするために回答を更新します
rapaio

@rapaio答えてくれてありがとう、medoidの数に基づいて反復の数を決定する解決策に既に行きます。ここで、xを増やすと、2〜3回の反復のコストで初期化を改善できます。あなたが与えた2番目の部分に基づいて、あなたは大丈夫ですか?再度、感謝します。
マルコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.