Helve’s Python memo

Pythonを使った機械学習やデータ分析の備忘録

Scikit-learnの主成分分析 (PCA)

Python機械学習ライブラリScikit-learnに実装されている主成分分析のクラスを調べた。
本記事では、PCAクラスのパラメータ、属性とメソッドについて解説する。

目次

環境

Scikit-learn 0.20.3

はじめに

主成分分析 (PCA, Principal Component Analysis)とは、データの分散をなるべく維持しつつ、データの次元を減らす手法である。
主成分分析について解説しているサイトは多数あるため、ここでは説明を省略する。

主成分分析のクラス

Scikit-learnには、主成分分析はPCAというクラスで実装されている。

sklearn.decomposition.PCA(n_components=None, copy=True, 
                          whiten=False, svd_solver='auto', tol=0.0, 
                          iterated_power='auto', random_state=None)

以下、パラメータ、メソッド、属性を解説する。

パラメータ

パラメータの説明は以下の通り。

n_components: int, float, None or string
整数を指定すると、圧縮後の次元数になる。
ソルバがfullのとき、0~1の小数の指定が可能であり、n_componentsの割合で分散を維持できるだけの最小の次元数が自動で選ばれる。
また、デフォルトのNoneでは、fitメソッドに与えるデータの、
サンプル数と次元数の小さい値が選ばれる。

copy: bool
Falseならば、fitfit_transformで変換するデータを上書きする(デフォルト値はTrue)。

whiten: bool
Trueならば、白色化とよばれる、変数間の相関をなくす処理を行う(デフォルト値はFalse)。
詳細は以下のページを参照。
無相関化と白色化の意味と式 - 具体例で学ぶ数学

svd_solver : string
特異値分解のソルバを選ぶ。
'auto', 'full', 'arpack', 'randomized'の4つから選択できる。
'full'と'arpack'は厳密解である。
'randomized'は近似解であるが、データ数や入力次元が非常に多い場合は非常に高速である。
各ソルバの計算速度等は、以下のページが詳しい。
【python】sklearnのPCAでsvd_solverによる速度差を比較 - 静かなる名辞

tol: float>= 0
svd_solver'arpack'のとき、固有値の許容精度を指定する。

iterated_power: int>=0
svd_solver'randomized'のときの計算反復回数を指定する。

random_state: int, RandomState instance or None
乱数シード。
svd_solver'arpack'または'randomized'のときに使われる。

メソッド

主なメソッドの説明は以下の通り。

fit(X)
PCAをあてはめる。
Xはサンプル数×特徴量数の2次元配列。

fit_transform(X)
PCAをあてはめて変換する。
戻り値はサンプル数×n_componentsの2次元配列。

transform(X)
fitfit_transformで定義したPCAの変換を行う。
戻り値はサンプル数×n_componentsの2次元配列。

inverse_transform(X)
PCAの逆変換を行う。
Xはサンプル数×n_componentsの2次元配列。
戻り値はサンプル数×特徴量数の2次元配列。

属性

PCAクラスの主な属性は以下の通り。

components_
n_components×元の特徴量数の2次元配列。
元の行列をXとすると、transformメソッドは以下の変換に等しい。

np.dot(X-X.mean(axis=0), PCA.components_)

すなわち、Xの平均を0として、n_componentsとの内積をとる。

explained_variance_ratio_
個々の主成分の因子寄与率を表す、長さn_componentsの1次元配列。
因子寄与率とは、データ全体の分散に対する、個々の主成分の分散の割合である。
n_componentsNoneとして、全ての主成分を保存している場合、explained_variance_ratio_の合計は1になる。

参考

sklearn.decomposition.PCA — scikit-learn 0.21.3 documentation

以下の書籍は、回帰や分類といった機械学習の手法を扱っている。
主成分分析を含むデータの前処理についても、詳しい解説が載っている。

※Adblockが有効の場合やモバイル版ページでは、シェアボタンをクリックできません