PCAがよりよく説明された分散比を与える前にデータを正規化しない


19

データセットを正規化した後、3つのコンポーネントPCAを実行して、小さな説明付き分散比([0.50、0.1、0.05])を取得しました。

データセットを正規化せずにデータセットを白色化して3コンポーネントPCAを実行すると、説明された分散比が高くなりました([0.86、0.06,0.01])。

できるだけ多くのデータを3つのコンポーネントに保持したいので、データを正規化してはいけませんか?私の理解では、PCAの前に常に正規化する必要があります。

正規化により:平均を0に設定し、単位分散を持ちます。

pca 

3
それはあなたが(私はPCAでこれを行うには、少なくとも4つの標準の方法を知っているし、おそらくもっとある)「正規化」することで、データを何を意味するのか不明であるが、それはで材料のように聞こえるstats.stackexchange.com/questions/53かもしれません照らします。
whuber

whubberこんにちは:私は、単位ノルムに各観測を正規化する意味

1
ありがとう。そのための通常の用語は「標準化」です。それを行うと、相関に基づいてPCAを実行します。だから、私が提供したリンクはすでにあなたの質問に答えていると思います。ただし、異なる結果が得られる理由や方法を実際に説明している回答はありません(おそらく複雑で、標準化の効果を予測するのが難しいかもしれません)。
whuber

1
PCAの前のホワイトニングは一般的ですか?それをする目標は何ですか?
シャドウトーカー14

2
たとえば、画像で作業している場合、画像の標準は明るさに対応します。非正規化データの説明された分散が大きいということは、多くのデータが明るさの変化によって説明できることを意味します。多くの場合画像処理ではないため、明るさが重要ではない場合は、最初にすべての画像を標準にする必要があります。でも、あなたのPCAコンポーネントの説明分散が低くなりますと思った、それはより良い何をしている興味で反映されます。
アーロン

回答:


37

分析の目的に依存します。いくつかの一般的なプラクティス、その一部はwhuberのリンクに記載されています。

  1. 通常、標準化は、PCAが実行される変数が同じスケールで測定されない場合に行われます。標準化とは、すべての変数に等しい重要度を割り当てることを意味することに注意してください。
  2. それらが同じスケールで測定されておらず、標準化されていない変数で作業することを選択した場合、各PCが単一の変数によって支配されている場合が多く、変数による分散の並べ替えが行われます。(各(初期)コンポーネントの負荷の1つは+1または-1に近くなります。)
  3. あなたが経験したように、2つの方法はしばしば異なる結果につながります。

直観的な例:

2つの変数があるとします:ツリーの高さと同じツリーの周囲。ボリュームをファクターに変換します。ボリュームが20立方フィートを超える場合、ツリーはボリュームが大きくなり、そうでない場合はボリュームが小さくなります。Rにプリロードされているtreesデータセットを使用します。

>data(trees)
>tree.girth<-trees[,1]
>tree.height<-trees[,2]
>tree.vol<-as.factor(ifelse(trees[,3]>20,"high","low"))

ここで、実際に高さをフィートではなくマイルで測定したと仮定します。

>tree.height<-tree.height/5280
>tree<-cbind(tree.height,tree.girth)
>
>#do the PCA
>tree.pca<-princomp(tree)
>summary(tree.pca)
Importance of components:
                      Comp.1       Comp.2
Standard deviation     3.0871086 1.014551e-03
Proportion of Variance 0.9999999 1.080050e-07
Cumulative Proportion  0.9999999 1.000000e+00

最初のコンポーネントは、データの変動のほぼ100%を説明します。ローディング:

> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height        -1    
tree.girth   1           

グラフィカルな評価:

>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

最初の方法のバイプロット

ボリュームの大きいツリーでは、周囲のサイズが大きくなる傾向がありますが、3つの高さではツリーのボリュームに関する情報は得られません。これはおそらく間違っており、2つの異なる単位測定の結果です。

同じ単位を使用することも、変数を標準化することもできます。両方とも、変動性のよりバランスのとれた全体像につながると期待しています。もちろん、この場合、変数は同じ単位を持つべきであるが、標準化されるべきではなく、有効な引数である可能性があると主張することができます。(木の重量と木の周りを測定する場合、両方を測定するスケールはもはや明確ではありません。この場合、標準化された変数を処理する明確な議論があります。)

>tree.height<-tree.height*5280
>tree<-cbind(tree.height,tree.girth)
>
>#do the PCA
>tree.pca<-princomp(tree)
> summary(tree.pca)
Importance of components:
                          Comp.1    Comp.2
Standard deviation     6.5088696 2.5407042
Proportion of Variance 0.8677775 0.1322225
Cumulative Proportion  0.8677775 1.0000000
> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height -0.956  0.293
tree.girth  -0.293 -0.956

>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

2番目の方法のバイプロット

現在、背の低い樹木の低い胴回りと低い高さ(右上隅)に比べて、背が高く胴回りの大きい樹木は体積が大きい(左下隅)ことがわかります。これは直感的に理にかなっています。

ただし、よく見ると、高低のボリュームではなく高さのボリュームでコントラストが最も大きいことがわかります。標準化するとどうなるか見てみましょう。

>tree<-scale(tree,center=F,scale=T)
>tree.pca<-princomp(tree)
> summary(tree.pca)
Importance of components:
                          Comp.1     Comp.2
Standard deviation     0.2275561 0.06779544
Proportion of Variance 0.9184749 0.08152510
Cumulative Proportion  0.9184749 1.00000000
> loadings(tree.pca)

Loadings:
            Comp.1 Comp.2
tree.height  0.203 -0.979
tree.girth   0.979  0.203
>biplot(tree.pca,xlabs=tree.vol,col=c("grey","red"))

3番目の方法のバイプロット

確かに、胴回りは現在、高ボリュームの木と低ボリュームの木の違いの大部分を説明しています!(バイプロットの矢印の長さは、元の変数の分散を示しています。)そのため、物事が同じスケールで測定されている場合でも、標準化は有用です。たとえば、異なる樹種の長さを比較する場合、これはまったく同じ測定であるため、標準化しないことをお勧めします。


2
(+1)非常に良い答えで、実際に共分散対相関に関するPCAについてリンクされた人気のあるスレッドで与えられたものをすべて上回っています。
アメーバは、モニカを復活させる14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.