クラスタリングする前にデータを標準化する必要はありますか?


23

クラスター化する前にデータを標準化する必要がありますか?以下からの例ではscikit learnDBSCANについて、ここで彼らはラインで次の操作を行います。

X = StandardScaler().fit_transform(X)

しかし、なぜそれが必要なのかわかりません。結局のところ、クラスタリングはデータの特定の分布を想定していません-それは教師なしの学習方法なので、その目的はデータを探索することです。

なぜデータを変換する必要があるのですか?


詳細な回答ありがとうございます!あなたのすべての答えのフォローアップとして:機能が異なるスケールにある場合、これは問題を引き起こす可能性があることを理解しています。ただし、距離メトリックが分散に正規化されている場合、クラスタリング前の標準スケーリングと同じ結果が得られますか?すなわち、通常、正規化されたユークリッド距離に関連するものを使用します-これはスケーリング効果も緩和しますか?
Candic3

回答:


19

正規化は必ずしも必要ではありませんが、ほとんど問題はありません。

いくつかの例:

K-means

K-meansクラスタリングは、空間のすべての方向で「等方性」であるため、多かれ少なかれ丸い(細長いというよりも)クラスターを生成する傾向があります。この状況では、分散を等しくないままにすることは、分散が小さい変数により多くの重みを付けることと同等です。

Matlabの例:

X = [randn(100,2)+ones(100,2);...
     randn(100,2)-ones(100,2)];

% Introduce denormalization
% X(:, 2) = X(:, 2) * 1000 + 500;

opts = statset('Display','final');

[idx,ctrs] = kmeans(X,2,...
                    'Distance','city',...
                    'Replicates',5,...
                    'Options',opts);

plot(X(idx==1,1),X(idx==1,2),'r.','MarkerSize',12)
hold on
plot(X(idx==2,1),X(idx==2,2),'b.','MarkerSize',12)
plot(ctrs(:,1),ctrs(:,2),'kx',...
     'MarkerSize',12,'LineWidth',2)
plot(ctrs(:,1),ctrs(:,2),'ko',...
     'MarkerSize',12,'LineWidth',2)
legend('Cluster 1','Cluster 2','Centroids',...
       'Location','NW')
title('K-means with normalization')

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

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

(FYI:データセットがクラスタ化されているかクラスタ化されていないかを検出する方法(つまり、1つの単一クラスタを形成する方法

分散クラスタリング

比較分析は、分散クラスタリングの結果が正規化手順のタイプに依存することを示しています。

人工ニューラルネットワーク(入力)

MLPのように、入力変数が線形に結合される場合、少なくとも理論的には、入力を標準化することが厳密に必要になることはめったにありません。その理由は、対応する重みとバイアスを変更することで、入力ベクトルの再スケーリングを効果的に取り消すことができ、以前とまったく同じ出力が得られるためです。ただし、入力を標準化することでトレーニングを高速化し、ローカルの最適化で立ち往生する可能性を減らすことができるさまざまな実際的な理由があります。また、標準化された入力を使用して、重量減衰とベイズ推定をより便利に行うことができます。

人工ニューラルネットワーク(入力/出力)

データに対してこれらのことを行う必要がありますか?答えは、それは依存します。

入力変数またはターゲット変数のいずれかを標準化すると、最適化問題の数値条件(ftp://ftp.sas.com/pub/neural/illcond/illcond.htmlを参照)を改善し、さまざまなデフォルトを確保することにより、トレーニングプロセスの動作が改善される傾向があり ます。初期化と終了に関係する値が適切です。ターゲットの標準化も目的関数に影響を与える可能性があります。

ケースの標準化は情報を破棄するため、注意してアプローチする必要があります。その情報が無関係である場合、ケースの標準化は非常に役立ちます。その情報が重要な場合、ケースを標準化することは悲惨なことです。


興味深いことに、測定単位を変更すると、Kaufman、Leonard、Peter J. Rousseeuw ..という非常に異なるクラスタリング構造が表示される場合があります。「データ内のグループの検索:クラスター分析の概要」。(2005)。

一部のアプリケーションでは、測定単位を変更すると、非常に異なるクラスタリング構造が表示される場合があります。たとえば、4人の架空の人々の年齢(年単位)と身長(センチメートル単位)を表3に示し、図3にプロットします。{A、B)と{C、0)は2つの十分に分離されたクラスターのようです。一方、高さをフィートで表すと、表4と図4が得られます。ここで、明らかなクラスターは{A、C}と{B、D}です。各被験者が別のコンパニオンを受け取っているため、このパーティションは最初のパーティションとはまったく異なります。(年齢が数日で測定されていた場合、図4はさらに平坦化されていたでしょう。)

測定単位の選択へのこの依存を回避するために、データを標準化するオプションがあります。これにより、元の測定値が単位なし変数に変換されます。

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

カウフマン等。興味深い考慮事項(11ページ)を続けます。

哲学的な観点から、標準化は実際に問題を解決しません。実際、測定単位の選択により、変数の相対的な重みが生じます。変数を小さな単位で表現すると、その変数の範囲が広くなり、結果の構造に大きな影響を与えます。他方では、客観性を達成することを期待して、すべての変数に同じ重みを与えようとする試みを標準化します。そのため、事前知識を持たない開業医が使用する場合があります。ただし、特定のアプリケーションでは、一部の変数が他の変数より本質的に重要であり、重みの割り当ては主題の知識に基づいている必要があります(たとえば、Abrahamowicz、1985を参照)。一方、変数のスケールに依存しないクラスタリング手法を考案する試みがありました(Friedman and Rubin、1967)。Hardy and Rasson(1982)の提案は、クラスターの凸包の総体積を最小化するパーティションを検索することです。原則として、このような方法はデータの線形変換に関して不変ですが、残念ながらその実装用のアルゴリズムは存在しません(2次元に制限される近似を除く)。したがって、標準化のジレンマは現在避けられないようであり、この本で説明されているプログラムはユーザーに選択を任せています。Hardy and Rasson(1982)の提案は、クラスターの凸包の総体積を最小化するパーティションを検索することです。原則として、このような方法はデータの線形変換に関して不変ですが、残念ながらその実装用のアルゴリズムは存在しません(2次元に制限される近似を除く)。したがって、標準化のジレンマは現在避けられないようであり、この本で説明されているプログラムはユーザーに選択を任せています。Hardy and Rasson(1982)の提案は、クラスターの凸包の総体積を最小化するパーティションを検索することです。原則として、このような方法はデータの線形変換に関して不変ですが、残念ながらその実装用のアルゴリズムは存在しません(2次元に制限される近似を除く)。したがって、標準化のジレンマは現在避けられないようであり、この本で説明されているプログラムはユーザーに選択を任せています。


1
この答えは驚異的です
-Candic3

6

そうでなければ、各機能の値の範囲がデータのクラスタリング方法を決定する際の重みとして機能するため、データの標準化が推奨されます。これは通常望ましくありません。

たとえば、ほとんどのクラスタリングアルゴリズム(sci-kit learnのDBSCANを含む)の標準メトリックを検討してください- euclideanあるいは、L2ノルムとして知られています。いずれかの機能の値の範囲が他の機能よりもはるかに大きい場合、クラスタリングはその1つの機能によって完全に支配されます。これを説明するために、以下の簡単な例を見てください。

>>> import numpy as np
>>> from sklearn.preprocessing import StandardScaler
>>> from sklearn.metrics.pairwise import euclidean_distances
>>> 
>>> X = np.array([[1,2,100],[4,3,50],[1,1,75]])
>>> 
>>> print X
[[  1   2 100]
 [  4   3  50]
 [  1   1  75]]
>>> 
>>> print euclidean_distances(X)
[[  0.          50.0999002   25.01999201]
 [ 50.0999002    0.          25.25866188]
 [ 25.01999201  25.25866188   0.        ]]
>>> print euclidean_distances(StandardScaler().fit_transform(X))
[[ 0.          3.46410162  1.73205081]
 [ 3.46410162  0.          3.46410162]
 [ 1.73205081  3.46410162  0.        ]]

これから、標準化されていないバージョン間のユークリッド距離は、値の範囲が他の2つよりもはるかに大きいため、3番目の列によって支配されていることがわかります。ただし、データが標準化されると、これは問題にならず、各データポイント間の距離を計算するときに各フィーチャが等しいと重み付けされます。


1

厳密に標準化する必要はありません。必要かどうかは、選択した距離メトリックに依存する場合があります。

たとえば、マハラノビス距離を選択した場合、分離はスケール不変メトリックであるため、ポイント間の絶対距離ではなく、ポイントを分離する標準偏差の数に基づきます。

機械学習の多くのことと同様に、難しい答えはありません。確実に知る唯一の方法は、データに最適な結果が得られるさまざまな手法を適用することです。


0

場合によっては、「ビジネス評価」機能を定義して、クラスタリングに使用されるディメンションの「重要性」を定義すると役立つことがありました。たとえば、顧客をクラスター化する八百屋の場合、リンゴの価格がオレンジの2倍であれば、リンゴの数は2倍になります。


しかし、それをクラスター化する追加機能として含めることはできませんか?つまり、価格はクラスター化する機能になりますか?
Candic3
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.