PCA変換の可視化

Pythonで学ぶ教師なし学習

Benjamin Wilson

Director of Research at lateral.io

次元削減

  • ストレージと計算コストの効率化
  • 情報量の少ない、特徴量の「ノイズ」を排除する
  • ノイズは、分類や回帰などの予測タスクで障害となる
Pythonで学ぶ教師なし学習

主成分分析(PCA)

  • PCA =「主成分分析(Principal Component Analysis)」
  • 基本的な次元削減手法
  • 第1ステップ「無相関化」(今回取り上げる内容)
  • 第2ステップで次元を削減(後ほど説明)
Pythonで学ぶ教師なし学習

PCAでデータを軸に沿わせる

  • データサンプルを軸に沿うように回転させる
  • サンプルの平均がゼロになるように移動させる
  • 情報は失われていない

ワインのデータの散布図(軸が回転)

Pythonで学ぶ教師なし学習

PCAのfit/transformメソッド

  • PCAは、KMeansStandardScalerのようなscikit-learnコンポーネント
  • fit()は、与えられたデータから変換方法を学習する
  • transform()は学習済みの変換を実行する
  • transform()は新しいデータにも適用可能
Pythonで学ぶ教師なし学習

scikit-learn PCAを使う

  • samples = 2つの特徴量の配列(total_phenolsod280
[[ 2.8   3.92]
 ...
 [ 2.05  1.6 ]]
from sklearn.decomposition import PCA

model = PCA() model.fit(samples)
PCA()
transformed = model.transform(samples)
Pythonで学ぶ教師なし学習

PCA特徴量

  • 変換後の各サンプルが行に入る
  • 変換後の「PCA特徴量」が列に入る
  • 行は対応するサンプルのPCA特徴量を示す
print(transformed)
[[  1.32771994e+00   4.51396070e-01]
 [  8.32496068e-01   2.33099664e-01]
 ...
 [ -9.33526935e-01  -4.60559297e-01]]
Pythonで学ぶ教師なし学習

PCA特徴量は相関していない

  • データセットの特徴量は相関しやすい(例:total_phenolsod280
  • PCAはデータを軸に合わせる
  • 得られたPCA特徴量は線形相関がない(「無相関化」)

回転した線を持つワインデータの分散図

Pythonで学ぶ教師なし学習

ピアソン相関

  • 特徴量の線形相関を測定
  • -1から1の間の値
  • 0は線形相関がないことを意味する

相関係数 0.7、0、-0.7の3つの散布図

Pythonで学ぶ教師なし学習

主成分

  • 「主成分」= 分散の方向
  • PCAは主成分を軸に合わせる

ワインのデータの散布図と、主成分(回転した軸)の方向を示す2本の赤い矢印

Pythonで学ぶ教師なし学習

主成分

  • PCAオブジェクトのcomponents_属性で取得可能
  • 各行は平均からのズレを表す
print(model.components_)
[[ 0.64116665  0.76740167]
 [-0.76740167  0.64116665]]
Pythonで学ぶ教師なし学習

練習しましょう!

Pythonで学ぶ教師なし学習

Preparing Video For Download...