PCA 主成分分析(次元圧縮)【Pythonとscikit-learnで機械学習:第21回】

PCA(主成分分析)によるデータの次元圧縮を実装します。

昨今のビッグデータ化や、とりあえずデータを用意してみるという風潮から、データの「次元圧縮」の重要性はますます高まっています。

「次元圧縮は」多次元のデータから「意味のある特徴量」を特定したり、新たな軸を作る(基底を変換する)ことで、少ない変数でデータを再現します。

本記事ではデータの次元圧縮で第一に用いられるPCA(Princial Component Analysis)、日本語で主成分分析と呼ばれる手法を実装します。

主成分分析は、scikit-learnのアルゴリズムチートマップの以下の黒矢印に対応します。

[scikit-learnのマップ]

次元圧縮→[Randomized PCA]

です。

PCA

本記事ではワインのサンプルデータを使用して、次元圧縮を行います。

実装コードは以下の通りです。

結果は次の通りになります。

結果のグラフ(上)は、PCAにより2次元に圧縮した結果です。

下のグラフは色(10列)とプロリンの量(13列)でプロットした結果です。

なんとなくPCAにより、より分けやすいプロットに変化している気がします。

コードを解説します。

# 解説4:主成分分析を実施——————————-
pca = decomposition.PCA(n_components=2)
X_transformed = pca.fit_transform(X)

ここでPCAを実施したときに軸の数を2本に設定し、データに実行しています。

# 解説5: 主成分分析の結果—————————–
print(“主成分の分散説明率”)
print(pca.explained_variance_ratio_)
print(“固有ベクトル”)
print(pca.components_)
explained_variance_ratio_ によって、PCAの結果が元のデータのどれくらいを説明しているかを計算しています。

2つ足し合わせると約0.56となり、元の12次元のデータの約56%の情報を2次元で保持していることがわかります。

また、components_により、主成分1, 2の軸方向のベクトル(固有ベクトル)を表示しています。

それでは「結局、PCAって何をやっていたの?」を説明します。

PCAの心

正確な情報は以下をご覧ください。

scikit-learnのdecompositonの解説ページ

scikit-learnのPCAの解説ページ

PCAはデータを固有値展開し、固有値が大きいものから固有ベクトルを基底として、データを基底に投影する手法です。

何やら難しい説明ですが、固有値展開を使って、分散が大きな方向の軸を求めていることになります。

軸同士は直交し、相関0となります。

PCAで検索すれば、いろいろな説明サイトがあるので、適宜ごらんください。

 

以上、Pythonとscikit-learnで学ぶ機械学習入門|第21回:PCAでの次元圧縮でした。

次回はKernel-PCAによる次元圧縮について説明します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...