PCAから得たものをどのように解釈できますか?


14

大学の課題の一部として、私はかなり巨大な多変量(> 10)生データセットでデータの前処理を行う必要があります。私はどんな意味でも統計学者ではないので、何が起こっているのか少し混乱しています。おそらく簡単に笑える質問に謝罪します。さまざまな答えを見て、統計情報を調べようとすると頭が回転します。

私はそれを読んだ:

  • PCAにより、データの次元を減らすことができます
  • これは、多くの相関関係がある(したがって、少し不必要な)属性/ディメンションをマージ/削除することによって行われます。
  • 共分散データで固有ベクトルを見つけることでこれを行います(これを学ぶために私が従った素敵なチュートリアルのおかげです)

それは素晴らしいです。

ただし、これを実際にデータにどのように適用できるのか、本当に苦労しています。たとえば、(これ私が使用するデータセットではありませんが、人々が作業できる適切な例の試みです)、次のようなデータセットがある場合...

PersonID     Sex     Age Range    Hours Studied     Hours Spent on TV      Test Score     Coursework Score 
1            1       2            5                 7                      60             75
2            1       3            8                 2                      70             85 
3            2       2            6                 6                      50             77
...          ...     ...          ...               ...                    ...            ...

結果をどのように解釈するかはよくわかりません。

私がオンラインで見たチュートリアルのほとんどは、PCAの非常に数学的な見方を教えてくれるようです。私はそれについていくつかの研究を行い、それらを追跡しました-しかし、私はこれが私にとって何を意味するのかまだ完全にはわかりません。

データに対してPCAを実行するだけで(統計パッケージを使用)、数値のNxNマトリックス(Nは元の次元の数)を吐き出します。これは完全にギリシャ語です。

どうすればPCAを実行し、取得したものを元の寸法の観点から平易な英語に変換できるようにすることができますか?


3
サンプルデータには、性別が二分、年齢が序数、残りの3つが間隔(および異なる単位である)のデータタイプが混在しています。区間データには線形PCAを使用するのが適切です(ただし、単位のため、最初にこれらの変数をz標準化する必要があります)。PCAがバイナリデータまたは2分データに適しているかどうかは議論の余地があります。線形PCAで順序データを使用しないでください。しかし、あなたの例のデータを主な質問:なぜ、すべてのそれとPCAを行うには、この場合、どのような意味がありますか?
ttnphns

このpdfは、PCAアプリケーションに役立ちます。ここの他の投稿は、PCA結果の「意味」を説明するのに適しています。
AMS

(間違っている場合は修正してください)PCAは、データの傾向を見つけ、どの属性がどの属性に関連するかを把握するのに役立ちます(最終的には、パターンなど)。この大量のデータセットがあり、クラスタリングと分類子を適用するだけであるという私の割り当ての詳細と、前処理に不可欠であるとリストされている手順の1つはPCAです。データセットからいくつかの2次属性を抽出しようとした場合、それらをすべて間隔データで取得する必要がありますか?
ニッツァー

3
現時点では、PCAの詳細を読むことをお勧めします(このサイトでも)。多くの不確実性は確実になくなります。
ttnphns

上記の多くのすばらしいリンクは、実用的な例であり、技術用語があったとしてもごくわずかであるため、回帰の観点からPCAについて良い感触を「与える」ことができる短い例です。sites.stat.psu.edu/~ajw13/stat505/fa06/16_princomp/...
リバイアサン

回答:


14

投稿したチュートリアルの13〜20ページでは、PCAが次元削減にどのように使用されるかについて、非常に直感的な幾何学的説明を提供しています。

あなたが言及する13x13マトリックスは、おそらく「ロード」または「回転」マトリックス(元のデータに13個の変数があったと思いますか)です。

  1. ロードマトリックスの(の絶対値)列は、各変数が各コンポーネントに比例して「寄与する」量を示します。

  2. 回転行列は、回転行列で定義された基準に基づいてデータを回転させます。したがって、2次元データがあり、そのデータに回転行列を掛けると、新しいX軸が最初の主成分になり、新しいY軸が2番目の主成分になります。

編集:この質問は多くの質問がありますので、次元削減のためにPCAを使用する際に何が起こっているのかを視覚的に詳細に説明します。

y = x +ノイズから生成された50ポイントのサンプルを考えます。以下に示すように、最初の主成分はy = xの線に沿って配置され、2番目の成分はy = -xの線に沿って配置されます。

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

アスペクト比は少し混乱しますが、コンポーネントは直交していると言います。PCAを適用すると、コンポーネントがx軸とy軸になるようにデータが回転します。

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

変換前のデータは円、後のデータは十字です。この特定の例では、データはy = -2xの線で反転するほど回転しませんでしたが、ここで説明したように、y軸を簡単に反転させて一般性を損なうことなく本当に回転させることができます

分散の大部分、つまりデータ内の情報は、最初の主成分(データを変換した後のx軸で表される)に沿って広がります。2番目のコンポーネント(現在はy軸)に沿ってわずかな変動がありますが、情報を大幅に失うことなくこのコンポーネントを完全に削除できます。したがって、これを2次元から1に折りたたむには、最初の主成分へのデータの投影にデータを完全に記述させます。

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

元の軸に回転(投影、投影)することで、元のデータを部分的に復元できます。

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

濃い青色の点は「回復した」データであり、空の点は元のデータです。ご覧のとおり、元のデータから一部の情報、特に2番目の主成分の方向の分散が失われています。しかし、多くの目的のために、この圧縮された説明(最初の主成分に沿った投影を使用)は私たちのニーズに合うかもしれません。

これを自分で複製したい場合に、この例を生成するために使用したコードを次に示します。2行目のノイズ成分の分散を減らすと、データが最初の主成分に収束するため、PCA変換によって失われるデータの量も減少します。

set.seed(123)
y2 = x + rnorm(n,0,.2)
mydata = cbind(x,y2)
m2 = colMeans(mydata)

p2 = prcomp(mydata, center=F, scale=F)
reduced2= cbind(p2$x[,1], rep(0, nrow(p2$x)))
recovered = reduced2 %*% p2$rotation

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data with principal component vectors')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Data after PCA transformation')
points(p2$x, col='black', pch=3)
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
arrows(x0=mean(p2$x[,1])
      ,y0=0
      ,x1=mean(p2$x[,1])
      ,y1=1
      ,col='blue'
       )
arrows(x0=mean(p2$x[,1])
       ,y0=0
       ,x1=-1.5
       ,y1=0
       ,col='red'
)
lines(x=c(-1,1), y=c(2,-2), lty=2)


plot(p2$x, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='PCA dimensionality reduction')
points(reduced2, pch=20, col="blue")
for(i in 1:n){
  lines(rbind(reduced2[i,], p2$x[i,]), col='blue')
}

plot(mydata, xlim=c(-1.5,1.5), ylim=c(-1.5,1.5), main='Lossy data recovery after PCA transformation')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+abs(p2$rotation[1,1])
       ,y1=m2[2]+abs(p2$rotation[2,1])
       , col='red')
arrows(x0=m2[1], y0=m2[2]
       ,x1=m2[1]+p2$rotation[1,2]
       ,y1=m2[2]+p2$rotation[2,2]
       , col='blue')
for(i in 1:n){
  lines(rbind(recovered[i,], mydata[i,]), col='blue')
}
points(recovered, col='blue', pch=20)

5
デビッド、「回転行列」(別名​​固有ベクトル)と「ローディング行列」という用語を同じ意味で使用しないでください。純粋さのためであり、人々を誤解させないため。PCAの負荷は、固有値で正規化した後の固有ベクトルです。ありがとうございました。
ttnphns

3
@ttphns使用するパッケージに完全に依存すると思います。多くの場合、これらの用語は完全に交換可能です。ここでの「負荷」の利用を考えてみましょう:utdallas.edu/~herve/abdi-awPCA2010.pdfを。またprcomp、負荷行列が列が単位固有ベクトルである行列であるR関数も参照してください。あなたは不必要に技術的であり、ほとんどの場合、これらの用語は同じ意味で使用されていると思います。
デビッドマルクス

4
申し訳ありませんが、私は同意しません。理由:PCAと因子分析にとって、負荷は意味のある(そして同じ意味で!)ことを忘れないでください。負荷は相関/共分散に直接匹敵します。固有ベクトルは回転余弦です。因子分析では、多くの方法は、(回転に対応していない時に抽出相)。したがって、2つの用語を混在させることは、実際に学生を誤解させるものであり、避けるべきです。
ttnphns

小さい点:正しいつづりは常に「プリンシパル」であり、「プリンシパル」ではありません。それに応じて編集しましたが、編集できない画像が1つあります。
ニックコックス

1
別のビジュアルはここで見つける
SIslam

2

私はあなたの質問がでていないだけで資格問題であると言うだろうcross validatedが、また中stack overflow列/変数がより良いの分散に貢献する効果的にあなたが識別しやすいように、あなたは、Rにおける次元削減を実装する方法を告げする場所(..など。)、データセット全体。

PCA(主成分分析)にはSVD(特異値分解)と同じ機能scaleがあり、データセットに/変換を適用した後の実際のプロセスはまったく同じです。

理解を深めるために、30分で調べることができるリソースを次に示します。

svdの実装方法と各コンポーネントの機能を理解するのに役立つ鮮やかなコーディングソリューションを提供することはできませんが、人々は素晴らしいです。手で3by3 SVD問題を計算する方法を知っている.. :)

  1. Jeff LeekによるCoursera Data Analysis Class:ビデオレクチャー / クラスノート
  2. 非常に有益な学生投稿
  3. アメリカ数学会からの投稿。

Jeff Leekのクラスは、PCAで何ができるかを理解するのに非常に適しています。良いことは、複雑な数学的/統計的な詳細(他の多くの場所で見つけることができます)には入らず、むしろデータで実際にそれを使用する方法を示す実践的なアプローチを提供することです。
ニコ

1

PCAでは、より少ない変数でデータを記述します。すべての変数よりも少ない変数で同じ情報を取得できます。たとえば、学習時間とテストスコアは相関している可能性があり、両方を含める必要はありません。

あなたの例では、あなたの目的は、学生/人がどれだけ「良い」かを測定することだとしましょう。これらすべての変数を見ると、これを行う方法を理解するのは混乱する可能性があります。PCAにより、どの生徒が良いか悪いかを明確に確認できます。

最初の主成分がデータの変化の大部分を説明する場合、これで十分です。このコンポーネントとすべての変数の間に相関関係があります。「大きな」相関は重要な変数を意味します。たとえば、最初のコンポーネントは、学習時間とテストスコアと強く相関する場合があります。したがって、最初のコンポーネントの高い値は、学習時間とテストスコアの高い値を示します。

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