主成分分析後のデータでロジスティック回帰はじめに昨日、主成分分析の累積寄与率も特徴量選択に使えますよというアドバイスをTwitterでいただいたので、忘れないうちに勉強しておきます。Analysisの略であり、データセットの特徴量を相互に統計的に関連しないように回転する手法です。回転したあとの特徴量から、データを説明するのに重要な一部の特徴量だけを抜き出すこと(次元圧縮)ができます。多くの特徴量を持つデータの可視化にも利用できます。行うと各主成分に対応した固有値を求めることができます。この固有値は主成分の分散に対応しており、その主成分がどの程度元のデータの情報を保持しているかを表しています。寄与率ある主成分の固有値が表す情報が、データのすべての情報の中でどの位の割合を占めるかを表します。寄与率を大きい順に足しあげていったもので、そこまでの主成分でデータの持っていた情報量がどのくらい説明されているかを示します。今回はscikit-learnで提供されているcancerデータセットを利用します。pd.DataFrame(data=cancer.data,columns=cancer.feature_names)X_df.head()cancerデータセットロジスティック回帰でテスト主成分分析で次元圧縮する前に、まずはそのまま30個の説明変数を使って、ロジスティック回帰で学習・テストさせて、基準となる精度を出してみます。107]]テストデータで精度97%というまずまずの結果になりました。主成分分析で寄与率を確認まずは次元圧縮せず(=特徴量:30のまま)に、寄与率を確認してみます。]寄与率は、第1主成分で44%、第2主成分で19%、・・・といった値になっており、第4主成分までの累積で80%を超えることがわかります。主成分分析を次元圧縮に用いる場合、累積寄与率80%の主成分のみを使い、以降の主成分は切り捨てられることが多いようです。2次元まで圧縮してプロット第2主成分まで次元圧縮(30次元→2次元)して、主成分を軸として散布図にプロットしてみます。2)確かに、2次元まで圧縮されていることがわかります。component')次元圧縮後のcancerデータをプロット上記からも分かるように、PCAは適切な回転を発見する際にはまったくクラス情報(今回で言うとtargetの悪性/良性)を用いていません。PCAは教師なし手法であると言えます。上記の散布図では、2つのクラスが綺麗に分離できていることが見て取れると思います。これならば、線形クラス分類でもそれなりに分類できそうです。PCAの欠点PCAの欠点として、プロットした2つの軸の解釈が難しいことが挙げられます。2つの主成分の方向は元のデータの方向に対応しており、元の特徴量の組み合わせに過ぎませんが、これは一般的に複雑になると言われています。下記のようにcomponents_を表示することで、主成分を確認することができます。処理が増えたので、Pipelineでまとめて処理を実装しています。101]]テストデータの精度で95%となり、全ての説明変数を使った場合と比較して約3ポイント落ちています。30次元から2次元まで圧縮したことを考えれば、まずまずの精度が得られているのではないでしょうか。今回は平面にプロットするため、次元数を2まで圧縮しましたが、上記でも述べている通り、主成分分析では累積寄与率80%の主成分のみを使い以降の主成分は切り捨てられることが多いようなので、今回のデータセットの場合はもう少し次元数を増やしても良いかもしれません。いずれにせよ、PCAを用いて次元圧縮することで、(あまり重要ではない)特徴量を減らすことができ、可視化も行えることが分かりました。機械学習においてはデータの次元数が大きくなり過ぎると、「次元の呪い」と呼ばれる要因によって効率的に機械学習をさせるのが難しくなります。(計算コスト、過学習、etc)そういった場合にPCAなどはとても有効となり得そうです。...こんにちは!たかぱい(@takapy0210)です。本記事は、AI道場...2019-06-23GloVeを使って単語の分散表現を取得するこんにちは。takapy(@takapy0210)です。本日は特徴量エンジニアリングの重要性について、scikit-learn...2018-06-28k-最近傍法でアイリスのクラス分類問題を解く(python)こんばんは。toC企業でMLエンジニアとして働いています。ブログでは主に機械学習界隈の話ができればと思っています。(1)月別アーカイブリンクプライバシーポリシ。