変数をドロップしないで、PCAの使用を検討してください。その理由は次のとおりです。
まず、Anony-mousseが指摘したように、k-meansは共線性/相関の悪影響を受けません。そのため、情報を捨てる必要はありません。
第二に、変数を間違った方法でドロップすると、いくつかのサンプルを人為的に近づけます。例:
Customer CatA CatB CatC
1 1 0 0
2 0 1 0
3 0 0 1
(%表記を削除し、0から1の間の値を入力するだけで、すべて合計が1になります。)
自然な3D空間での各顧客間のユークリッド距離は(1 − 0 )2+ (0 − 1 )2+(0 − 0 )2−−−−−−−−−−−−−−−−−−−−−−−√= 2–√
ここで、CatCをドロップするとします。
Customer CatA CatB
1 1 0
2 0 1
3 0 0
顧客1と2の間の距離はまだですが、顧客1と3、および2と3の間は √のみです2–√(1 − 0 )2+ (0 − 0 )2−−−−−−−−−−−−−−−√= 1。生データがサポートしない方法で、顧客3を人為的に1と2に類似させました。
第三に、コリネラリティ/相関は問題ではありません。あなたの次元はそうです。100個の変数は十分に大きいため、1000万個のデータポイントがあっても、k-meansがデータ内に誤ったパターンを見つけてそれに適合する可能性があります。代わりに、PCAを使用して、より管理しやすい次元に圧縮することを検討してください。たとえば、10または12から始めます(多分、はるかに高く、おそらくはるかに低い-各コンポーネントに沿った分散を見て、再生する必要があります)少し、正しい番号を見つけるために)。そうすることで、いくつかのサンプルを人為的に近づけることができますが、データの分散の大部分を維持し、相関関係を優先的に削除する方法でこれを行います。
~~~~~
編集:
再、PCAに関する以下のコメント。はい、それは絶対に病状を持っています。しかし、試してみるのは非常に迅速で簡単ですので、問題の次元を減らしたいのであれば、それでも私にとって悪い賭けではないようです。
しかし、その点については、100次元の合成データのいくつかのセットをk-meansアルゴリズムにすばやく投げて、それらがどのようなものかを調べました。クラスターの中心位置の推定はそれほど正確ではありませんでしたが、クラスターのメンバーシップ(つまり、2つのサンプルが同じクラスターに割り当てられているかどうか、OPが関心を持っているようです)は思ったよりもはるかに優れていました。したがって、以前の私の直感はかなり間違っていた可能性があります-k-means migthは生データでうまく機能します。