ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

kmeans

K 平均クラスタリング

構文

IDX = kmeans(X,k)
[IDX,C] = kmeans(X,k)
[IDX,C,sumd] = kmeans(X,k)
[IDX,C,sumd,D] = kmeans(X,k)
[...] = kmeans(...,param1,val1,param2,val2,...)

説明

IDX = kmeans(X,k) は、np 列のデータ行列 X 内の点を k クラスターに分割します。この反復分割によって、点とクラスター重心間の距離のクラスター内合計をすべてのクラスターについて合計した総和を最小化できます。X の行は点に対応し、列は変数に対応します。kmeans は、各点のクラスター インデックスを含む n1 列のベクトル IDX を返します。既定の設定では、kmeans は、2 乗ユークリッド距離を使用します。X がベクトルの場合、kmeans はこれを方位に関係なく n 行 1 列のデータ行列として扱います。

[IDX,C] = kmeans(X,k) は、kp 列の行列 Ck クラスター重心位置を返します。

[IDX,C,sumd] = kmeans(X,k) は、点と重心間距離のクラスター内合計を 1k 列のベクトル sumd で返します。

[IDX,C,sumd,D] = kmeans(X,k) は、各点からすべての重心までの距離を nk 列の行列 D で返します。

[...] = kmeans(...,param1,val1,param2,val2,...) は、オプションのパラメーター/値のペアを指定すると、kmeans によって使用される反復アルゴリズムを制御できます。有効なパラメーター文字列を次の表に示します。

パラメーター
'distance'

p 次元空間内の距離の尺度。kmeans は、このパラメーターに対して最小化します。kmeans は、サポートされているさまざまな距離の尺度に対して重心クラスターをそれぞれ計算します。

 'sqEuclidean'

2 乗ユークリッド距離 (既定の設定)。各重心は、そのクラスターの点の平均です。

 'cityblock'

L1 距離など、絶対差分の合計。各重心は、そのクラスターの点の成分単位の中央値です。

 'cosine'

1 から、ベクトルとして扱われる点の間の夾角の余弦を引いた値。各重心は、そのクラスターの点を単位ユークリッド長に正規化した後の平均です。

 'correlation'

1 から、値の系列として扱われる点の間の標本相関を引いた値。各重心は、そのクラスターの点を中心にシフトしてゼロ平均と単位標準偏差に正規化した後の、それらの点の成分単位の平均です。

 'Hamming'

異なるビットの割合 (バイナリ データのみに適用可能)。各重心は、そのクラスターの点の成分単位の中央値です。

'emptyaction'

クラスターのすべてのメンバー観測が失われた場合に実行するアクション。

'error'

空のクラスターを誤差として処理します (既定の設定)。

'drop'

空になったすべてのクラスターを削除します。kmeans は、C および D 内の対応する戻り値を NaN に設定します。

'singleton'

その重点から最も遠くにある 1 つの点で構成される新しいクラスターを作成します。

'onlinephase'

kmeans がバッチ更新フェーズに加え、オンライン更新フェーズを実行するかどうかを示すフラグ。オンライン フェーズは、大規模なデータセットでは時間がかかる場合がありますが、距離基準の局所的最小値になる解、つまり、1 つの点を他のクラスターに移動すると距離の総和が増大するデータ分割になる解が保証されます。

'on'

オンライン更新を実行します (既定の設定)。

'off'

オンライン更新を実行しません。

'options'

近似基準の最小化に使う反復アルゴリズムに対するオプションを指定する構造体。statset を使用して options 構造体を作成します。該当する statset パラメーターは次のとおりです。

Display表示出力レベル。選択肢は、‘off’ (既定の設定)、‘iter’ および ‘final’ です。
MaxIter許容される最大反復回数。既定の設定は 100 です。
UseParalleltrue で、Parallel Computing Toolbox™ の parpool が開いている場合、並列計算を行います。Parallel Computing Toolbox がインストールされていないか、parpool が開いていない場合、計算は逐次モードで行われます。既定の設定は、default または逐次計算です。
UseSubstreams再生成可能な方法で並列計算する場合に true に設定します。既定の設定は false です。再現性のある計算を行うには、Streams をサブストリームを許可する型、'mlfg6331_64' または 'mrg32k3a' に設定します。
StreamsRandStream オブジェクトまたはそのようなオブジェクトのセル配列。Streams を指定しないと、kmeans には既定のストリームが使用されます。Streams を指定するように選択した場合、次の場合を除いて単一のオブジェクトを使用してください。
  • 開いている並列プールがある

  • UseParalleltrue

  • UseSubstreamsfalse

この場合は、並列プールと同じサイズのセル配列を使用します。並列プールが開いていない場合、Streams は単一の乱数ストリームを提供しなければなりません。

'replicates'

それぞれ初期クラスター重心位置の新しいセットをもつクラスタリングの反復回数。kmeans は、sumd の最低値をもつ解を返します。'start' パラメーターの値として 3 次元配列を指定して 'replicates' を暗黙的に指定できます。

'start'

初期クラスター重心位置を選択するために使用されるメソッド。"シード" と呼ばれる場合もあります。

'sample'

k 観測を X から無作為に選択します (既定の設定)。

'uniform'

k 点を一様に無作為に X の範囲から選択します。ハミング距離では使用できません。

'cluster'

X の無作為な 10% 副標本で予備クラスタリング フェーズを実行します。この予備フェーズは、'sample' を使用して初期化されます。

Matrix

kp 列の行列の重心開始位置。この場合、k に対して [] を渡すと、kmeans は行列の最初の次元から k を推測します。また、配列の 3 番目の次元の 'replicates' パラメーターの値を示す 3 次元配列を指定することもできます。

次の例は、別々の乱数データから 2 つのクラスターを作成します。

X = [randn(100,2)+ones(100,2);...
     randn(100,2)-ones(100,2)];
opts = statset('Display','final');

[idx,ctrs] = kmeans(X,2,...
                    'Distance','city',...
                    'Replicates',5,...
                    'Options',opts);
5 iterations, total sum of distances = 284.671
4 iterations, total sum of distances = 284.671
4 iterations, total sum of distances = 284.671
3 iterations, total sum of distances = 284.671
3 iterations, total sum of distances = 284.671

plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
     'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
     'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')

詳細

すべて展開する

アルゴリズム

kmeans は、2 つのフェーズの反復アルゴリズムを使用して、すべての k クラスターにわたって合計される点と重心間距離の総計を最小化します。

  1. 最初のフェーズでは、バッチ更新を使用します。この更新の各反復では、最も近いクラスター重心に点を一度に再割り当てした後、クラスター重心を計算し直します。このフェーズは、局所的最小値になる解、つまり、1 つの点を他のクラスターに移動すると距離の総和が増大するデータ分割になる解に収束しない場合があります。これは、規模の小さなデータセットでよく発生します。バッチ フェーズは高速ですが、2 番目のフェーズの開始点となる解だけが概算される可能性があります。

  2. 2 番目のフェーズでは、オンライン更新を使用します。この更新では、点を個別に再割り当てし、再割り当てすることで距離の合計が減少する場合は、各再割り当ての後にクラスター重心を再計算します。2 番目のフェーズでの各反復は、すべての点を通して 1 つの引き渡しで構成されます。2 番目のフェーズは局所的最小値に収束します。ただし、距離の総和がさらに小さくなる局所的最小値が他にある可能性もあります。大域的最小値の検出という問題を解決するには、一般に、開始点を網羅的に選択する (またはうまく選択する) しかありませんが、通常はランダムな開始点をもつ複数の複製を使用することで、解が大域的最小値になります。

参考文献

[1] Seber, G. A. F. Multivariate Observations. Hoboken, NJ: John Wiley & Sons, Inc., 1984.

[2] Spath, H. Cluster Dissection and Analysis: Theory, FORTRAN Programs, Examples. Translated by J. Goldschmidt. New York: Halsted Press, 1985.

参考

| |

この情報は役に立ちましたか?