PCAが分類器の結果を悪化させる原因は何ですか?


27

クロスバリデーションを行っている分類子と、機能の最適な組み合わせを見つけるために前方選択を行っている100個程度の機能があります。また、これをPCAで同じ実験を実行した場合と比較します。PCAでは、潜在的な特徴を取り、SVDを適用し、元の信号を新しい座標空間に変換し、前方選択プロセスで上位特徴を使用します。k

私の直感では、信号は元の機能よりも「有益」であるため、PCAは結果を改善します。PCAに対する私の素朴な理解は、私をトラブルに導きますか?PCAが特定の状況では結果を改善するが、他の状況では結果を悪化させる一般的な理由のいくつかを提案できますか?


あなたの質問は次のように要約できますか?:「何が良いですか-元の変数またはそれらから抽出されたいくつかの主成分に基づいて分類子を構築するには?
ttnphns

1
「元の変数を使用するほうがよい場合と、それらから抽出されたいくつかの主成分を使用する方がよい状況はありますか?」
ドランアンテヌッチ

1
多くの分類手法があります。たとえば、判別分析を行う場合は、この投稿を読むことをお勧めします(そこに自分のコメントを含む)。
ttnphns

1
「分類器の結果」とはどういう意味ですか?比率が正しく分類されている場合、これは不連続な不適切なスコアリングルール、つまり、偽のモデルによって最適化された精度スコアです。まず、適切な精度スコアリングルールを使用することをお勧めします。
フランクハレル

1
パーティーには少し遅れましたが、最初に確認したいのは、前方選択の検証結果が実際には独立したケースで得られたことです。そうでなければ、恐らくあなたは大きな楽観的なバイアスにさらされるでしょう。
cbeleitesは、モニカをサポートします

回答:


29

素晴らしく過小評価されている記事「回帰における主成分の使用に関する注意」から抜粋した単純なケースを考えてみましょう。

2つの(スケーリングされた、および意味のない)特徴のみがあり、それらがXに整列し、分類したい3番目の応答変数Yで0.5に等しい正の相関を持つおよびx 2であることを示します。Yの分類がx 1 - x 2の符号によって完全に決定されると仮定します。x1x2XYYx1x2

上にPCAを行う(分散によって順序付け)新しいもたらす特徴[ X 1 + X 2xは1 - X 2 ]、以降ヴァーX 1 + X 2= 1 + 1 + 2 ρ > ヴァーX 1 - X 2= 2 - 2 ρX[x1+x2,x1x2]Var(x1+x2)=1+1+2ρ>Var(x1x2)=22ρ。したがって、次元を1(つまり、最初の主成分)に減らすと、分類の正確な解は捨てられます!

この問題は、PCAが依存しないために発生します。残念ながら、PCA にYを含めることはできません。これにより、データが漏洩する可能性があります。YY


データ漏えいは、問題のターゲット予測子を使用して行列が構築されるときに発生するため、サンプル外の予測は不可能です。X

例:金融時系列では、米国東部標準時の午後4時にアメリカの終業日のクローズを使用して、米国東部標準時の午前11:00に発生するヨーロッパの終日クローズを予測しようとすると、 、数時間後に発生し、欧州の終値の価格が組み込まれています。


2
「データ漏洩」とは何ですか?
user603

@Wayne高価なすぎ(笑)
Cam.Davidson.Pilon

(-1)混乱の原因:(1)PCAは監視されていないため、変換の計算にYが含まれることはありません。対応する監視手法はXとYの両方を使用するPLSです。(2)データ漏洩(統計的に依存するデータでのテストなど)は、監視手法を使用すること自体は従いません。それどころか:すべての計算で複数のケース(センタリング、スケーリング、PCA / PLS投影など)を使用する最初の分析ステップからのルールに従わない場合、PCAでもPLSと同じように発生します。 ...(学習データのみになるように、すなわち必要性を行うこと
cbeleitesはモニカ・サポート

...代理モデルごとに再計算されました。これらの計算の結果は、その後、トレーニングケースなどにPCAによって得られた回転するよう、すなわち、トレーニングデータから得られたセンターを引く、テストデータに適用することができます
cbeleitesモニカサポート

例については、時系列は特に困難です。独立したケースを構成するものはアプリケーションに大きく依存するためです。たとえばstats.stackexchange.com/questions/76376/…を
cbeleitesはMonica

23

簡単な幾何学的な説明があります。Rで次の例を試して、最初の主成分が分散を最大化することを思い出してください。

library(ggplot2)

n <- 400
z <- matrix(rnorm(n * 2), nrow = n, ncol = 2)
y <- sample(c(-1,1), size = n, replace = TRUE)

# PCA helps
df.good <- data.frame(
    y = as.factor(y), 
    x = z + tcrossprod(y, c(10, 0))
)
qplot(x.1, x.2, data = df.good, color = y) + coord_equal()

# PCA hurts
df.bad <- data.frame(
    y = as.factor(y), 
    x = z %*% diag(c(10, 1), 2, 2) + tcrossprod(y, c(0, 8))
)
qplot(x.1, x.2, data = df.bad, color = y) + coord_equal()

PCAヘルプ PCA helps

最大分散の方向は水平であり、クラスは水平に分離されます。

PCAが痛い PCA hurts

最大分散の方向は水平ですが、クラスは垂直に分離されています


...そして例2では、​​監視された類推であるPLSが実際に役立ちます。
cbeleitesは、


3

質問にはすでに受け入れられた答えがありますが、分類前の特徴変換にPCAを使用することについて話しているこの論文を共有したかったです。

持ち帰りメッセージ(@vqvの回答で美しく視覚化されています)は次のとおりです。

主成分分析(PCA)は、データが最大の変動性を示す軸の抽出に基づいています。PCAは新しい基準でデータを「広げ」、教師なし学習に大いに役立ちますが、新しい軸が(教師あり)分類問題の識別機能と一致するという保証はありません。

興味のある方は、セクション4をご覧ください。実験結果では、分類精度を1)元のfeatuer、2)PCA変換された機能、3)両方の組み合わせと比較しています。

私の結論:

PCAベースのフィーチャ変換により、多数のフィーチャからの情報を限られた数のコンポーネント、つまり元のフィーチャの線形結合にまとめることができます。ただし、主成分は解釈が難しい場合が多く(直感的ではありません)、このホワイトペーパーの実験結果が示すように、通常は分類パフォーマンスは向上しません。

PS:掲載すべき論文の限界の1つは、著者が分類器のパフォーマンス評価を「精度」のみに制限しているという事実であり、これは非常に偏ったパフォーマンス指標になる可能性があることに注意してください。


3

3つの独立変数を持つ単純なケースを想定します バツ1バツ2バツ3 そして出力 y そして今、それを仮定します バツ3=y したがって、0エラーモデルを取得できるはずです。

今、トレーニングでの変動を設定すると仮定します y 非常に小さいので、バリエーションも バツ3

ここで、PCAを実行し、2つの変数のみを選択することにした場合、次の組み合わせを取得します。 バツ1 そして バツ2。だからの情報バツ3 それが説明できる唯一の変数でした y 失われます。

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