クラスタリングアルゴリズムが意味のある結果を生成するのに十分なデータが「クラスター化」されているかどうかを確認する方法


78

(高次元の)データが十分なクラスタリングを示しているので、kmeansまたは他のクラスタリングアルゴリズムの結果が実際に意味があるかどうかをどのように確認しますか?

特にk-meansアルゴリズムの場合、実際のクラスタリング結果が意味のある(スプリアスではない)ために、クラスター内分散の減少はどれくらい必要ですか?

次元的に縮小された形式のデータをプロットすると、クラスタリングが明らかになります。また、クラスタリングを視覚化できない場合、kmeans(または他の方法)の結果は意味がありませんか?


1
1が10十分に分離クラスターを期待するだろうが、:手書き数字は、クラスタリングのための素晴らしいテストを行い、これは、少なくとも64Dにおけるユークリッドメトリックでは、まったくのk = 10で何の膝を示しません。
デニス


2
この質問は、ある程度、クラスタリング結果の有効性を確認する方法と、「より良い」方法を選択する方法に関連しています。たとえばstats.stackexchange.com/q/195456/3277を参照してください。
ttnphns 16

回答:


77

特にk-meansについては、ギャップ統計を使用できます。基本的に、アイデアは、増加するクラスターの参照分布と比較した平均分散に基づいて、クラスター化の良さを計算することです。詳細については、元の論文に記載されています。

Tibshirani、R.、Walther、G。、およびHastie、T。(2001)。ギャップ統計を使用したデータセット内のクラスター数の推定。JR統計学者。Soc。B、63(2):411-423。

関連する質問に私が提供した回答は、特定のデータセットが何らかの構造を示すかどうかを確認するために使用できる他の一般的な有効性インデックスを強調しています。

ノイズのみが存在する場合に何を見つけることができるのかわからない場合、リサンプリングを使用してクラスターの安定性を調べるのが良い方法です。言い換えれば、データをリブートし(ブートストラップを介して、または小さなノイズを追加することにより)、Jaccardの類似性によって測定された結果のパーティションの「近さ」を計算します。つまり、同様のクラスターがデータで復元された頻度を推定できます。このメソッドはfpc Rパッケージでとしてすぐに利用できますclusterboot()。入力として生データまたは距離行列のいずれかを受け取り、幅広いクラスタリング手法(階層的、k-means、ファジー手法)を適用できます。この方法は、リンクされたリファレンスで説明されています。

Hennig、C.(2007)クラスター安定性のクラスターごとの評価計算統計とデータ分析、52、258-271。

Hennig、C.(2008)溶解点と分離の堅牢性:一般的なクラスター分析手法の堅牢性基準Journal of Multivariate Analysis、99、1154-1176。

以下は、k-meansアルゴリズムを使用した小さなデモです。

sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
            sim.xy(100, c(2.5,0), c(.4,.2)),
            sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
                       clustermethod=kmeansCBI,
                       krange=3, seed=15555)

3つのクラスター(krange)のいずれもサンプル全体で解消されず、クラスターごとの平均Jaccardの類似性はすべてのクラスターで> 0.95であるため、この人工(および十分に構造化された)データセットでは結果が非常に良好です。

以下は、20個のブートストラップサンプルの結果です。見てわかるように、統計単位は同じクラスターにグループ化されたままになる傾向がありますが、それらの間にある観測値の例外はほとんどありません。

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

もちろん、この考え方を任意の有効性インデックスに拡張できます。ブートストラップ(置換を含む)で新しい一連の観測値を選択し、範囲(たとえば、シルエット幅、共表現相関、平方クラスター番号(2から10など)、100または500回繰り返し、クラスター数の関数として統計の箱ひげ図を見てください。

これは、同じシミュレーションデータセットで得られたものですが、ウォードの階層クラスタリングを使用して、コフェネティック相関(結果のパーティションで距離情報がどの程度再現されるかを評価)とシルエット幅(クラスター内の均一性と相互作用を評価する組み合わせ測定クラスター分離)。

cophenetic相関の範囲は0.6267から0.7511で、中央値は0.7031(500ブートストラップサンプル)です。シルエットの幅は、3つのクラスター(中央値0.8408、範囲0.7371-0.8769)を考慮すると最大になるようです。

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


この非常に有益な答えをありがとう!clusterbootのような音はまさに私が探しているものです。リンクも含めてくれてありがとう。
xuexue

1
シルエット値を解釈するためのいくつかのマジックナンバー:stats.stackexchange.com/a/12923/12359
フランクデルノンクール

1
gifでこれらのチャートを作成するために使用したコマンドは何ですか?
トラビスHeeter

2
@Travis画像は個別のPNGファイルとして保存され、ImageMagickを使用してアニメーションGIFファイルに変換されました。この投稿も参照してください。
-chl

10

高次元データが十分なクラスタリングを示すかどうかをすばやく視覚化する1つの方法は、t分散確率的近傍埋め込み(t-SNE)を使用することです。低次元の空間(2D、3Dなど)にデータを投影し、クラスター構造があればそれを維持するのにかなり良い仕事をします。

例:MNISTデータセット

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

Olivettiはデータセットに直面しています。

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


1
Rに顔(または画像)を適用する方法はありますか?
トラビスHeeter

1
@TravisHeeter知らない
フランクデルノンクール

4
tSNE投影データをクラスター化しないでください。たとえば、この回答を参照してください:stats.stackexchange.com/a/264647/7828
Anony-Mousse

9

確かに、プロット可能な次元数でクラスターを視覚的に識別する能力は、特にこの次元の削減がクラスタリング自体とは無関係に行われる場合(すなわち、次のことを見つけようとして無駄に試みた場合)、クラスタリングアルゴリズムの有用性の疑わしい基準ですクラスタリングが機能します)。

実際、クラスタリング方法は、人間の目/心がクラスタを見ることができないクラスタを見つけるのに最も価値があります。

簡単な答えは次のとおりです。クラスタリングを実行し、それが機能したかどうかを確認します(興味のある基準を使用して、@ Jeffの回答も参照してください)。


1
はい、そしてクラスターは必ずしもポイントの丸いグループとは限りません。
ウェイン

@chlこのアニメーション画像をRで作成しましたか?
ステファンローラン

7

とにかく結果はいつ意味がありますか?特にk-meansの結果は?

事実は、k-meansが特定の数学的統計を最適化することです。これに関連する「意味のある」ものはありません。

特に高次元のデータでは、最初の質問は次のようになります。ユークリッド距離はまだ意味がありますか?そうでない場合は、k-meansを使用しないでください。ユークリッド距離は物理的な世界では意味がありますが、他のデータがあるとすぐに意味を失います。特に、データを人為的にベクトル空間に変換する場合、ユークリッドである必要がある理由はありますか?

古典的な「古い忠実な」データセットを使用し、正規化せずに k平均を実行するが、純粋なユークリッド距離では、すでに意味がありません。実際には、何らかの形の「クラスターローカル」マハラノビス距離を使用するEMは、はるかにうまく機能します。特に、スケールが非常に異なる軸に適応します。

ところで、k-meansの重要な長所は、データがどのように見えても、実際には常にデータをパーティション分割することです。k-meansを使用して、均一なノイズをk個のクラスターに分割できます。明らかに、k-meansクラスタは意味がないと主張できます。または、これを受け入れることができます。ユーザーは、クラスターを「意味のある」要件にせずに、ユークリッド距離の二乗を最小化するためにデータを分割したいと考えました。


@ Anony-Mousseそして、「均一なノイズをk個のクラスターに分割する」ユースケース?
CodeFarmer

なにもない。重要な点は、k-meansは気にせず、均一なデータを「クラスター」に分割する、つまりナンセンスなクラスターを生成するということです。
アノニムース

6

最近、クラスタリングアルゴリズムを使用し始めたばかりなので、知識のある人がより完全な答えを提供できることを願っていますが、ここにいくつかの考えがあります。

「意味のある」というのは、ご存じのとおり、非常に主観的なものです。したがって、クラスタリングが十分であるかどうかは、最初にクラスタリングする必要がある理由に完全に依存しています。グループメンバーシップを予測しようとしている場合、クラスタリングは偶然よりも優れている(そして悪化しない)可能性が高いため、結果はある程度意味のあるものになるはずです。

このクラスタリングの信頼性を知りたい場合は、比較するためのメトリックが必要です。既知のメンバーシップを持つエンティティのセットがある場合、判別分析を使用して、予測がどれほど優れていたかを確認できます。既知のメンバーシップを持つエンティティのセットがない場合、フィールド内のクラスターに典型的な分散を知る必要があります。厳格なカテゴリを持つエンティティの物理的属性は、人間の心理測定データよりもグループ内の分散がはるかに低い可能性がありますが、必ずしもクラスタリングが「悪化」するわけではありません。

2番目の質問は、「kの値を選択する必要がありますか?」繰り返しますが、ここには難しい答えはありません。事前のカテゴリセットがない場合は、クラスターの数を最小限に抑えながら、クラスターの平均分散も最小限に抑えることをお勧めします。簡単なアプローチは、「クラスター数」対「平均クラスター分散」をプロットし、「エルボ」を探すことです。クラスターを追加してもクラスター分散に大きな影響はありません。

k-meansの結果は、視覚化できなければ意味がないとは言いませんが、クラスターが視覚的に明らかな場合には確かに魅力的です。繰り返しますが、これは単に質問に戻ります。なぜクラスタリングを行う必要があるのか​​、そしてどの程度信頼できる必要があるのか​​ということです。最終的に、これはデータの使用方法に基づいて回答する必要がある質問です。


3

クラスタリングに意味があるかどうかを判断するには、アルゴリズムを実行してクラスターの数をカウントし、1より大きい値を出力するかどうかを確認します。

kk

kk

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.