クラスタリングの前にデータをスケーリングすることは重要ですか?


44

私が見つかりました。このチュートリアルあなたは(私はそれがzスコアにデータを変換することを信じている)クラスタ化する前に、機能上のスケールの機能を実行する必要があることを示唆しています。

それが必要かどうか疑問に思っています。私は主に、データをスケーリングしないときに素敵な肘のポイントがあるので尋ねていますが、スケーリングすると消えます。:)

回答:


59

問題は、ケース間の距離の適切な尺度を表すものです。

ケースの違いが大きい場合と小さい場合の2つの機能がある場合、前者を距離のほぼ唯一のドライバーとして用意する準備はできていますか?

たとえば、体重をキログラムで、身長をメートルでクラスタリングした場合、1kgの違いは1mの身長の違いと同じくらい重要ですか?キログラム単位の重量とセンチメートル単位の高さで異なるクラスタリングを取得することは重要ですか?あなたの答えがそれぞれ「いいえ」と「はい」である場合、おそらくスケーリングする必要があります。

一方、東/西の距離と北/南の距離に基づいてカナダの都市をクラスタリングしている場合、通常は東/西のはるかに大きな違いがありますが、キロメートルまたはマイルのいずれかのスケーリングされていない距離を使用するだけでよい場合があります(ただし、地球の曲率の経度と緯度を調整することもできます)。


33

他の答えは正しいですが、例を見ることで問題を直感的に把握するのに役立つかもしれません。以下では、2つの明確なクラスターを含むデータセットを生成しますが、クラスター化されていないディメンションはクラスター化されたディメンションよりもはるかに大きくなります(軸上の異なるスケールに注意してください)。非正規化データのクラスタリングは失敗します。正規化されたデータのクラスタリングは非常にうまく機能します。

同じことは、両方の次元でクラスター化されたデータにも当てはまりますが、正規化はあまり役に立ちません。その場合、PCAを実行してから正規化すると役立つ場合がありますが、クラスターが直線的に分離可能で、PCA次元で重複しない場合にのみ役立ちます。(この例は、クラスター数が少ないため、非常に明確に機能します)

正規化バージョンと非正規化バージョンの両方でk-meansクラスタリングを使用した合成クラスターデータ

import numpy as np
import seaborn
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

rnorm = np.random.randn

x = rnorm(1000) * 10  
y = np.concatenate([rnorm(500), rnorm(500) + 5])

fig, axes = plt.subplots(3, 1)

axes[0].scatter(x, y)
axes[0].set_title('Data (note different axes scales)')

km = KMeans(2)

clusters = km.fit_predict(np.array([x, y]).T)

axes[1].scatter(x, y, c=clusters, cmap='bwr')
axes[1].set_title('non-normalised K-means')

clusters = km.fit_predict(np.array([x / 10, y]).T)

axes[2].scatter(x, y, c=clusters, cmap='bwr')
axes[2].set_title('Normalised K-means')

17

それはあなたのデータ依存します

明確に定義された意味を持つ属性がある場合。緯度と経度を言うと、データをスケーリングしないでください。これは歪みを引き起こすためです。(K-meansも悪い選択かもしれません-lat / lonを自然に処理できるものが必要です)

各属性がまったく異なるもの(靴のサイズと重量など)があり、異なる単位(lb、tons、m、kgなど)が付加されている数値データが混在している場合、これらの値は実際には比較できません。それらをz標準化することは、それらに等しい重みを与えるためのベストプラクティスです。

バイナリ値、離散属性、またはカテゴリ属性がある場合は、k-meansを避けてください。K平均計算する必要手段、および平均値は、この種のデータに意味がありません。


5

この論文で説明したように、k-meansは、ニュートンアルゴリズム、つまり勾配ベースの最適化アルゴリズムを使用して誤差関数を最小化します。データを正規化すると、このようなアルゴリズムの収束が改善されます。詳細はこちらをご覧ください。

アイデアは、データの異なるコンポーネント(フィーチャ)が異なるスケールを持っている場合、導関数はより高い分散で方向に沿って整列する傾向があり、それがより低い/遅い収束につながるということです。


4

標準化は、データの前処理の重要なステップです。

データセットの変動性を制御し、線形変換を使用して特定の範囲にデータを変換します。これにより、高品質のクラスターが生成され、クラスタリングアルゴリズムの精度が向上します。以下のリンクをチェックして、k-means分析への影響を確認してください。

https://pdfs.semanticscholar.org/1d35/2dd5f030589ecfe8910ab1cc0dd320bf600d.pdf

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