kmeansを実行する前に、相関/共線の変数を削除する必要がありますか?


13

顧客のクラスターを識別するためにkmeansを実行しています。クラスターを識別する変数は約100個あります。これらの各変数は、カテゴリに対する顧客の支出の割合を表します。そのため、100個のカテゴリがある場合、これらの変数の合計が各顧客に対して100%になるように、これらの100個の変数があります。現在、これらの変数は互いに強く相関しています。kmeansを実行する前に、これらのいくつかをドロップして共線性を除去する必要がありますか?

サンプルデータは次のとおりです。実際には、100個の変数と1,000万人の顧客がいます。

Customer CatA CatB CatC   
1         10%  70%  20%   
2         15%  60%  25%

1
データを無相関化するためにPCA分析を試みましたか?
ミロスラフサボ

2
「共線」は「相関」とまったく同じではありません。したがって、あなたの質問は不明のままです
-ttnphns

回答:


9

変数をドロップしないで、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空間での各顧客間のユークリッド距離は102+012+002=2

ここで、CatCをドロップするとします。

Customer CatA CatB 
1        1    0    
2        0    1    
3        0    0    

顧客1と2の間の距離はまだですが、顧客1と3、および2と3の間はのみです2102+002=1。生データがサポートしない方法で、顧客3を人為的に1と2に類似させました。

第三に、コリネラリティ/相関は問題ではありません。あなたの次元はそうです。100個の変数は十分に大きいため、1000万個のデータポイントがあっても、k-meansがデータ内に誤ったパターンを見つけてそれに適合する可能性があります。代わりに、PCAを使用して、より管理しやすい次元に圧縮することを検討してください。たとえば、10または12から始めます(多分、はるかに高く、おそらくはるかに低い-各コンポーネントに沿った分散を見て、再生する必要があります)少し、正しい番号を見つけるために)。そうすることで、いくつかのサンプルを人為的に近づけることができますが、データの分散の大部分を維持し、相関関係を優先的に削除する方法でこれを行います。

~~~~~

編集:

再、PCAに関する以下のコメント。はい、それは絶対に病状を持っています。しかし、試してみるのは非常に迅速で簡単ですので、問題の次元を減らしたいのであれば、それでも私にとって悪い賭けではないようです。

しかし、その点については、100次元の合成データのいくつかのセットをk-meansアルゴリズムにすばやく投げて、それらがどのようなものかを調べました。クラスターの中心位置の推定はそれほど正確ではありませんでしたが、クラスターのメンバーシップ(つまり、2つのサンプルが同じクラスターに割り当てられているかどうか、OPが関心を持っているようです)は思ったよりもはるかに優れていました。したがって、以前の私の直感はかなり間違っていた可能性があります-k-means migthは生データでうまく機能します。


1
PCAで変数を削除するときは、多くの注意が必要だと思います。まず、変数は単位によってスケールが異なるために変数を誤って削除する可能性があるため、そのような削除の前にすべての分散を正規化する必要があります。次に、PCAは非直交方向の変動がある場合に直交基底を前提とするため、これはk-meansによってキャプチャされますが、PCAによって排除されるため、微小変動のあるディメンションのみを削除します。
カグダスオズゲンク

1
バツ1バツ21ρ>0Y=バツ1バツ2。からのデータのPCAバツ1バツ2 識別します バツ1+バツ2 主成分として、排除する バツ1バツ2。退行Y オン バツ1+バツ2重要ではありません。
whuber

1
これは、監視なしの設定では無関係な議論です。監視設定の場合、yes PCAはターゲット変数との関係を気にしません。依存関係の方向が低分散の不運の方向にある場合。
カグダスオズゲンク

2

2dまたは3dのおもちゃの例では、ほとんど違いはありません。データに冗長性を追加するだけです。すべてのポイントは、奇数(d-1)次元の超平面上にあります。クラスタの意味も同じです。そして、この(d-1)次元超平面の距離は同じ距離の線形倍数なので、何も変わりません。

そのようなデータを人為的に構築する場合、例えば バツyバツyバツ+yその後、あなたは空間をゆがめて、の影響を強調しますバツ そして y。すべての変数に対してこれを行う場合、問題ではありません。ただし、この方法で重みを簡単に変更できます。これは、変数の正規化と重み付けが不可欠であるという既知の事実を強調します。データに相関がある場合、これはこれまで以上に重要です。

最も単純な例を見てみましょう:重複変数。

データセットでPCAを実行し、変数を複製する場合、これは事実上、この変数に重複した重みを付けることを意味します。PCAは、あらゆる方向の分散が同様に重要であるという前提に基づいています。したがって、PCAを実行する前に、実際に変数に慎重に重み付けする必要があります(相関関係を考慮し、他の必要な前処理も行います)。


1
stats.stackexchange.com/a/50583での分析を踏まえると、この推論は間違っているようです。
whuber

私は答えをかなり改善しました。おもちゃの例のデータに基づいていました。
QUITがあります--Anony-Mousse

1

変数の相関高い場合は、変数を削除することをお勧めします。

クラスタリングアルゴリズムやリンク方法に関係なく、一般的に従うべきことの1つは、ポイント間の距離を見つけることです。高度に相関する変数を保持することはすべて、2つのポイント間の距離を計算する際の重みを2倍にします(すべての変数が正規化されるため、効果は通常2倍になります)。

つまり、クラスター形成に影響を与える変数の強度は、他の変数との相関が高い場合に増加します。

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