SVD / PCAの変数の「正規化」


17

我々が持っていると仮定測定可能な変数、、我々は数やる、測定のをしてから実行したい特異値分解をするために最高の分散の軸を見つけるために、結果にポイント次元空間。(注:の平均はすでに減算されていると仮定しているため、すべてのについてです。)12... NM > N M N A IA I= 0 IN(a1,a2,,aN)M>NMNaiai=0i

ここで、変数の1つ(またはそれ以上)が、他と大きく異なる特性の大きさを持っていると仮定します。たとえば、値はの範囲で、残りはです。これにより、分散が最も大きい軸がの軸に向かって大きくます。 10 100 0.1 1 a 1a1101000.11a1

大きさの違いは、測定単位の不幸な選択のためかもしれません(たとえば、物理データ、たとえばキロメートルとメートルの場合)が、実際には異なる変数はまったく異なる次元(たとえば、重量と体積)を持っている可能性があります。それらに「同等の」ユニットを選択する明白な方法はないかもしれません。

質問: この問題を回避するためにデータを正規化する標準/一般的な方法が存在するかどうかを知りたいです。私は、何か新しいものをよりも、この目的のために匹敵する大きさを生成する標準的な手法にもっと興味を持っています。a1aN

編集: 1つの可能性は、各変数をその標準偏差または同様のもので正規化することです。ただし、次の問題が発生します。データを次元空間の点群として解釈してみましょう。この点群は回転させることができ、このタイプの正規化は、回転に応じて(SVD後の)最終結果が異なります。(例えば、最も極端な場合、データを正確に回転させて主軸を主軸に合わせると想像してください。)N

これを行うための回転不変の方法はないだろうと期待していますが、特に結果の解釈の警告に関して、誰かがこの問題についての文献の議論を指摘してくれれば幸いです。


4
通常、問題自体は回転不変ではありません。各変数は、それに適した従来の測定単位で記録されるためです。たとえば、はフィート単位、はミクロン単位、はリットル単位などです。すべての単位が同じでも、変数が異なる種類のものを測定する場合、変数の特性は、それらの変数の特性に応じて異なります。 :繰り返しますが、これは回転不変ではありません。したがって、指針となる原則または考慮事項として、回転不変性を放棄する必要があります。a1a2a3
whuber

回答:


11

3つの一般的な正規化は、センタリング、スケーリング、および標準化です。

ましょランダムな変数です。X

センタリングは

xi=xix¯.

結果のはます。xx¯=0

スケーリングは

xi=xi(ixi2).

結果のにはます。xixi2=1

標準化は、センタリングとスケーリングです。結果のはおよびます。¯ XxΣI X * I 2=1x¯=0ixi2=1


「SS」を定義してください。
ザボルクス

平方和。二乗の合計Xi。
ttnphns

平方和を分散ではなく1に設定する理由は、特異値が主軸に沿った標準偏差に対応するためです(誤解しない限り)。
ザボルクス

質問の編集も参照してください。
ザボルクス

@Szabolcs、編集のポイントを見逃すかもしれません。ただし、PCA(またはSVD)は単なる回転そのものです(軸の直交回転の特殊なケース)。クラウドの移動(センタリングなど)または収縮/膨張(スケーリングなど)は、この回転の結果に影響するはずです。
ttnphns

6

特に、この違いが異なる単位または異なる物理的寸法に起因する場合、非常に異なる分散を持つ個々の変数を持つことはPCAにとって問題になる可能性があることは絶対に正しいです。そのため、変数がすべて比較可能でない限り(同じ物理量、同じ単位)、共分散行列ではなく相関行列でPCAを実行することをお勧めします。こちらをご覧ください:

相関行列でPCAを実行することは、分析の前にすべての変数を標準化すること(および共分散行列でPCAを実行すること)と同等です。標準化とは、すべての変数が単位分散になるように、各変数を中央揃えしてから標準偏差で除算することを意味します。これは、すべてのユニットを比較可能にするための便利な「ユニットの変更」と見なすことができます。

変数を「正規化」するより良い方法があるかどうかを尋ねることができます。たとえば、生の分散ではなく、堅牢な分散推定値で除算することを選択できます。これは次のスレッドで尋ねられ、次の議論を参照してください(明確な答えはそこに与えられていませんが)。

最後に、標準偏差(または同様のもの)による正規化は回転不変ではないことを心配しました。はい、そうではありません。しかし、@ whuberが上記のコメントで述べたように、それを行う回転不変の方法はありません。個々の変数の単位を変更することは回転不変の操作ではありません!ここで心配することはありません。


4

PCAを適用する前の一般的な手法は、サンプルから平均を減算することです。そうしないと、最初の固有ベクトルが平均になります。あなたがそれをやったかどうかはわかりませんが、それについて話させてください。MATLABコードで話す場合:これは

clear, clf
clc
%% Let us draw a line
scale = 1;
x = scale .* (1:0.25:5);
y = 1/2*x + 1;

%% and add some noise
y = y + rand(size(y));

%% plot and see
subplot(1,2,1), plot(x, y, '*k')
axis equal

%% Put the data in columns and see what SVD gives
A = [x;y];
[U, S, V] = svd(A);

hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found directly')

%% Now, subtract the mean and see its effect
A(1,:) = A(1,:) - mean(A(1,:));
A(2,:) = A(2,:) - mean(A(2,:));

[U, S, V] = svd(A);

subplot(1,2,2)
plot(x, y, '*k')
axis equal
hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found after subtracting mean')

図からわかるように、(共)分散をよりよく分析する場合は、データから平均を差し引く必要があると思います。その場合、値は10-100から0.1-1の間ではありませんが、それらの平均はすべてゼロになります。分散は固有値(または特異値の2乗)として検出されます。検出された固有ベクトルは、平均を減算する場合とそうでない場合の場合のように、次元のスケールの影響を受けません。例えば、私はあなたのケースにとって平均を引くことが重要かもしれないことを伝える以下をテストし、観察しました。そのため、問題は分散ではなく、翻訳の違いに起因する可能性があります。

% scale = 0.5, without subtracting mean
U =

-0.5504   -0.8349
-0.8349    0.5504


% scale = 0.5, with subtracting mean
U =

-0.8311   -0.5561
-0.5561    0.8311


% scale = 1, without subtracting mean
U =

-0.7327   -0.6806
-0.6806    0.7327

% scale = 1, with subtracting mean
U =

-0.8464   -0.5325
-0.5325    0.8464


% scale = 100, without subtracting mean
U =

-0.8930   -0.4501
-0.4501    0.8930


% scale = 100, with subtracting mean
U =

-0.8943   -0.4474
-0.4474    0.8943

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


1
質問では、平均がすでに差し引かれていることに言及すべきでした。それに応じて編集します。
ザボルクス

1
各変数をその標準偏差で除算するだけの場合もありますが、他の人がしていることがあるのではないかと思っていました。たとえば、このデータセットは次元空間の点群と考えることができます。この -d空間の回転に依存しない方法でそれを行う方法はありますか?標準偏差で割ると、どの軸に沿ってそれらの標準偏差が取得されるかが重要になります(つまり、回転不変ではありません)。主軸に沿って行うと、変数は無相関に見えると思います。NNN
ザボルクス

1
回転に不変の方法はないかもしれませんが、少なくともこれらの問題の議論を読んでみたいと思います...どんなポインタでも歓迎します。 注:私は応用統計(linalg、prob理論などの数学のみ)のトレーニングを受けていないので、これから学習します。
ザボルクス

1
サンプルを中央に配置しない(列から平均値を引く)場合、通常、最初の固有ベクトルは平均値のベクトルではありません
whuber

-1 Downvoted。この答えはセンタリングについてのみであるのに対し、質問はスケーリングについてです。また、@ whuberで指摘されているように、最初の固有ベクトルは必然的に平均のベクトルであるという主張は間違っています。
アメーバは、モニカを復活させる

-5

PCAのデータを正規化するには、次の式も使用されます

SC=100Xmin(X)max(X)min(X)

どこ国のためにその指標のための生の値である年度における、および すべての年にわたるその指標のためのすべての国全体のすべての生の値を示します。c t XXctX


7
国や年についてだれが言いましたか?
ニックスタウナー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.