web-dev-qa-db-ja.com

クラスターの数がわからないという意味ですか?

私は、高次元のデータポイント(約50次元)のセットにk平均を適用しようとしています。クラスターの最適な数を見つける実装があるかどうか疑問に思っていました。

アルゴリズムがこれを一般的に行う方法は、クラスター間距離が最大化され、クラスター内距離が最小化されるということをどこかで読んだことを覚えていますが、どこでそれを見たのか覚えていません。これについて議論しているリソースを誰かに教えてもらえたらすばらしいと思います。私は現在、k-meansにSciPyを使用していますが、関連するライブラリも同様に問題ありません。

同じまたはより良いアルゴリズムを達成する別の方法がある場合は、お知らせください。

34
Legend

1つのアプローチは cross-validation です。

本質的には、データのサブセットを選択し、それをkクラスターにクラスター化し、残りのデータと比較して、クラスター化の程度を尋ねます:データポイントを同じクラスターメンバーシップに割り当てていますか、それとも別のクラスターに分類していますか?

メンバーシップがほぼ同じである場合、データはkクラスターにうまく適合します。それ以外の場合は、別のkを試します。

また、PCA( 主成分分析 )を実行して、50次元をより扱いやすい数に減らすことができます。 PCAの実行で、分散の大部分が50次元のうちの4から来ていることが示唆された場合は、それに基づいてkを選択できます。 4つのクラスターメンバーシップがどのように割り当てられているかを確認します。

15
Alex Reynolds

これを見てみましょう データセット内のクラスター数の決定に関するウィキペディアのページ

また、 Agglomerative Hierarchical Clustering を試すこともできます。このアプローチでは、クラスターの数を知る必要はありません。クラスターが1つだけ存在するまで、クラスターのクラスターが徐々に形成されます。この手法はSciPy( scipy.cluster.hierarchy )にも存在します。

8
Kevin Jalbert

興味深いアプローチの1つは、FredとJainによる エビデンスの蓄積 のアプローチです。これは、k-meansの複数の実行を多数のクラスターと組み合わせて、それらを全体的なソリューションに集約することに基づいています。このアプローチの優れた点は、クラスターの数がプロセスで決定されることと、最終的なクラスターが球形である必要がないことです。

4

良いパラメータを示唆する視覚化があります。 k-meansの場合、グラフグラムを使用して、さまざまなkでのいくつかの実行を視覚化できます(WEKAグラフグラムパッケージを参照してください-パッケージマネージャーまたは here で最適に取得できます。概要と例も参照できます here

1

また、各次元が実際に独立していることも確認する必要があります。多くのいわゆる多次元データセットには、同じものの複数の表現があります。

これらをデータに含めることは間違いありません。クラスター引数のサポートとして同じものの複数のバージョンを使用することは間違っています。

http://en.wikipedia.org/wiki/Cronbach 's_alpha

0
Michael

クラスタ番号が不明な場合は、代わりに階層クラスタリングを使用してみませんか?

最初は、孤立したクラスタはすべてクラスタであり、距離がしきい値よりも小さい場合は2つのクラスタごとにマージされ、マージがなくなるとアルゴリズムが終了します。

階層的クラスタリングアルゴリズムは、データに適した「K」を実行できます。

0
Luna_one

これを行う1つの方法は、kを大きなk(正しい数値と思われる値よりもはるかに大きい)、たとえば1000で実行することです。次に、これらの1000ポイントで平均シフトアルゴリズムを実行します(平均シフトはデータ全体を使用しますが、これらの1000ポイントのみを「移動」します)。平均シフトは、クラスターの量を見つけます。前にk平均なしで平均シフトを実行することは可能ですが、通常は遅すぎるため、O(N ^ 2 *#steps)なので、前にk平均を実行すると速度が上がります:O(N [〜# 〜] k [〜#〜]#steps)

0
tal