2016-09-13 5 views
0

私はsckit-learnからPCAを使用していますが、私は解釈しようとしている結果が出ているので、PCAを使用する前に平均を差し引く(標準化を行う)またはこれは何とかsklearnの実装に組み込まれていますか?PCAより前のスケール

また、2つのうちのどちらを実行する必要がありますか?もしそうなら、なぜこのステップが必要ですか?

+1

はい、あなたは、正規化を意味行う必要があります。また、フィーチャの範囲が非常に異なる場合は、フィーチャを拡大縮小する必要があります。私はしばしば 'sklearn.preprocessing.StandardScaler'を使います。 – MhFarahani

+0

情報をありがとう、あなたは必要に応じてこれを回答として投稿することができます。しかし、PCAが最大の分散の方向を考慮するとき、なぜスケールが必要なのか、私にはまだ疑問があります。私はPCAの前にデータを標準化するときにこれを打開するつもりはありませんか? – Marko

+0

大まかには、データが既に異なる尺度(例えば、すべての地物が100人の住人あたりXX)である場合、その尺度を変更すると、フィーチャが不等分散であるという事実に含まれる情報が削除されます。データのスケールが異なる場合は、PCAを実行する前にデータを正規化する必要があります。しかし、常にデータを中央に置きます。詳細を知りたい場合は、[crossvalidated](http://stats.stackexchange.com/)をチェックすることをお勧めします。 – ursan

答えて

1

例で説明しようとします。あなたが住宅に関する多くの特徴を含むデータセットを持っていて、購入が良いか悪いかを分類することが目標です(バイナリ分類)。データセットには、いくつかのカテゴリ変数(家の位置、条件、公共交通機関へのアクセスなど)といくつかの浮動小数点数(例えば、市場価格、寝室の数など)が含まれます。最初に行うことは、カテゴリ変数をエンコードすることです。たとえば、データセット内に100の場所がある場合、一般的な方法は0から99までをエンコードすることです。これらの変数をワンホットエンコード形式でエンコードすることもできます(つまり、各場所の1と0の列)あなたが使用しようとしている分類子に応じて今あなたが100万ドルで価格を使用すると、価格の特徴はずっと高い分散を持ち、したがって標準偏差が高くなります。分散を計算するには、meanとの差の二乗値を使用することを忘れないでください。より大きなスケールはより大きな値を作り、大きい値の正方形はより速く成長するでしょう。しかし、価格がインスタンスの場所に比べて大幅に多くの情報を運ぶことを意味するわけではありません。しかし、この例では、PCAは価格機能に非常に高い重みを与え、おそらくカテゴリ機能の重みはほとんど0に低下します。機能を正規化すると、データセットの説明された分散の公正な比較が提供されます。したがって、PCAを使用する前に平均を正規化し、フィーチャをスケールすることをお勧めします。

0

これは実際には技術的な回答ではありませんが、私の方法はどちらを試して、どれがPC1PC2のバリエーションが多いのかを見極めることです。しかし、属性が異なる尺度(例えば、cm対足対インチ)である場合、単位分散に比例するはずです。 いずれの場合も、データを中央に配置する必要があります。

ここでは、虹彩データセットw/centerとw/center + scalingがあります。この場合、センタリングはより高い説明された分散につながりますので、私はそのことに行きます。これはsklearn.datasets import load_irisデータから得ました。次に、PC1は、centerの重量のほとんどを持っているので、私はPC2で見つけるパターンは重要ではないと思います。一方、center | scaledでは、重量はPC1PC2の間で分割されるため、両方の軸を考慮する必要があります。

enter image description here enter image description here