質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Python 3.x

    6332questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PCAとStandardScalerについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 130

mimamoru

score 9

次元削減をしてスケーリングするのとスケーリングしてから次元削減するのでは、やはり結果は異なりますか?どちらが正しいのでしょうか?
次元削減をしてスケーリングする場合は
StandardScalerの後にPCA(n_components=2)などとし
スケーリングしてから次元削減する場合は
PCA(whiten=True,n_components=2)
とすればStandardScalerを呼び出したのと同じことになるのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

http://scikit-learn.org/stable/auto_examples/preprocessing/plot_scaling_importance.html


コード付きなので、実行してみると感覚をつかめるかと思います。
前処理などの性能を比較する際によくやるようなものになっています。

略訳

Feature scaling though standardization (or Z-score normalization) can be an important preprocessing step for many machine learning algorithms. Standardization involves rescaling the features such that they have the properties of a standard normal distribution with a mean of zero and a standard deviation of one.
While many algorithms (such as SVM, K-nearest neighbors, and logistic regression) require features to be normalized, intuitively we can think of Principle Component Analysis (PCA) as being a prime example of when normalization is important. In PCA we are interested in the components that maximize the variance. If one component (e.g. human height) varies less than another (e.g. weight) because of their respective scales (meters vs. kilos), PCA might determine that the direction of maximal variance more closely corresponds with the ‘weight’ axis, if those features are not scaled. As a change in height of one meter can be considered much more important than the change in weight of one kilogram, this is clearly incorrect.
To illustrate this, PCA is performed comparing the use of data with StandardScaler applied, to unscaled data. The results are visualized and a clear difference noted. The 1st principal component in the unscaled set can be seen. It can be seen that feature #13 dominates the direction, being a whole two orders of magnitude above the other features. This is contrasted when observing the principal component for the scaled version of the data. In the scaled version, the orders of magnitude are roughly the same across all the features.
The dataset used is the Wine Dataset available at UCI. This dataset has continuous features that are heterogeneous in scale due to differing properties that they measure (i.e alcohol content, and malic acid).
The transformed data is then used to train a naive Bayes classifier, and a clear difference in prediction accuracies is observed wherein the dataset which is scaled before PCA vastly outperforms the unscaled version.

PC 1 without scaling:
 [  1.76e-03  -8.36e-04   1.55e-04  -5.31e-03   2.02e-02   1.02e-03
   1.53e-03  -1.12e-04   6.31e-04   2.33e-03   1.54e-04   7.43e-04
   1.00e+00(13番目の成分)]

PC 1 with scaling:
 [ 0.13 -0.26 -0.01 -0.23  0.16  0.39  0.42 -0.28  0.33 -0.11  0.3   0.38
  0.28(13番目の成分)]

データの標準化は重要な前処理である。
多くのアルゴリズムでは特徴量(Xのこと)が正規化されていることが要求されるが、直感的にはPCAがその最たる例である。
PCAでは分散を最大化するように成分を抽出する。
もし1つの成分の分散が他のものより大きいのが、その成分のスケールのせいである時、PCAはその成分の支配度を大きく見積もってしまい、これは明らかに誤りである。(例と対応させるため、小さい→大きい、に変更)
以上を示すためにPCAの前に標準化を行うか否かで比較を行う。
標準化を行わないと13番目の成分が大きな割合を占めるのに対して、標準化を行うことで全ての成分が同じ程度の割合で取り入れられていることがわかる。
PCAの前に標準化を行うことでモデルの性能を大きく向上させることができる。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/10 07:13

    ありがとうございます(#^.^#)
    URL参考になりました!…英語が得意なら良かったですが…(o_o)

    キャンセル

  • 2018/05/10 07:40

    pythonやopencvと違って翻訳されていないのですね。
    略訳を追記しました。

    キャンセル

  • 2018/05/10 08:36

    ありがとうございます(#^.^#)
    助かりました!
    pcaのwhitenで次元削減後にスケーリングすることには別の利点があるのでしょうか?

    キャンセル

  • 2018/05/10 19:45

    https://arxiv.org/pdf/1512.00809.pdf
    難解、定量的。

    https://en.m.wikipedia.org/wiki/Whitening_transformation
    白色化wiki。

    https://github.com/scikit-learn/scikit-learn/issues/202
    実装の検討。

    http://ufldl.stanford.edu/tutorial/unsupervised/PCAWhitening/
    画像応用。

    http://takatakamanbou.hatenablog.com/entry/2015/02/15/150430
    日本語、画像応用より。

    https://hayataka2049.hatenablog.jp/entry/2018/03/27/024144
    私が説明するのは適任ではないはず。

    キャンセル

  • 2018/05/12 15:03

    ありがとうございました!
    参考にさせていただきます!

    キャンセル

+1

次元削減をしてスケーリングする場合は
StandardScalerの後にPCA(n_components=2)などとし
スケーリングしてから次元削減する場合は
PCA(whiten=True,n_components=2)

これは逆なのでは。

上の方(次元削減→スケーリング)はちょっと細かい計算手順は違いますが結果的には白色化するのと概ね同じで、最終的な結果の各成分が平均0分散1になる奴。

下の方(スケーリング→次元削減)は、相関行列で主成分分析するのと同じです。

写像先の空間のスケールをなくすか、元の空間のスケールを無視するかという違いがあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/10 07:12

    ありがとうございます(#^.^#)
    すみません。逆でした!
    どちらが正しいということはないのでしょうか?

    キャンセル

  • 2018/05/10 08:56

    どちらが正しいということはないし、両方やりたければ両方やることもできます
    白色化やスケーリング(相関行列でPCA)は筋論で言えば目的に応じてやる、実際問題としては定性的な判断があてにならないことも多いので(色々な機械学習モデルの前処理に組み込んで使う場合など)、評価指標とにらめっこして考えることになります

    キャンセル

  • 2018/05/10 13:32

    一応定性的な話としては、こういう事が言えます。
    入力をスケーリング:入力の変数のスケールが大きく違うときとかに役立つ(やらないとスケールの大きい変数に結果が引っ張られる)
    出力をスケーリング:後段の処理でスケールが違うとうまく機能しないものがあるとき役立つ(そういうアルゴリズムはたくさんあります)

    キャンセル

  • 2018/05/12 15:01

    ありがとうございます!
    とても分かりやすいです!もっと勉強します!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Enum.Parseすると値が変わってしまいます

    Visual Studio 2015 Community + .NET 4.6で以下のコードを実行すると本来の値と異なるものがかえってきます。 このような問題を対策するにはどうした

  • 解決済

    javaのJPanelの上での描画について

    javaでターン制のゲームを作っています。現在作っているBattleScreenクラスはバトル画面をJPanelに描画するクラスであり、MainScreenクラスのJFrameに追

  • 解決済

    node.jsのrequire()でjsxファイルを読み込めない

    前提・実現したいこと node.jsとreachでelectronアプリケーションを作成しようとしています。 electron src でアプリケーションを実行したところ、

  • 受付中

    CakePHP3のviewアクションでqueryを実行

    bakeで生成された $user = $this->Users->get($id, [ 'contain' => ['アソシエーションするテーブル',

  • 解決済

    NSDateのExtension

    この記事のコードをSwift3にして書いているのですが、 22行目でこのエラーが出てしまいます どのようにすればエラーを解決できるのでしょうか? ご教授お願いいたします。 i

  • 解決済

    ダミー変数を用いてPCAを行う

    PCAを用いて特徴変換をする際には、ダミー変数を用いたものを変換しても有効ですか?

  • 解決済

    主成分分析(PCA)でn_components=100でできない

     前提・実現したいこと PCA で 主成分100 で訓練する。  発生している問題・エラーメッセージ -------------------------------------

  • 受付中

    WebpackとVue-CLIを使った開発手法

     現状 Vue-CLI の pwa テンプレートで開発をしています。 Vue-router, Vuex も使うことになると思います。 Webstorm を使っています。  やり

同じタグがついた質問を見る

  • Python 3.x

    6332questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。