メインコンテンツへスキップ

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

·1432 文字·3 分
目次

はじめに
#

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

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

環境
#

Scikit-learn 0.20.3

主成分分析のクラス
#

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.24.0 documentation

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

Scikit-learnの正則化付き重回帰モデル
·2498 文字·5 分
Scikit-learnに実装されている重回帰、Ridge回帰、Lasso回帰、Elastic Netのロジックと使用方法をまとめた。
Scikit-learnでデータをスケール変換する
··4596 文字·10 分
Pythonの機械学習用ライブラリScikit-learnに実装されている、スケール変換について調べた。
Scikit-learn ランダムフォレスト回帰のfeature_importances_の定義
·1236 文字·3 分
Scikit-learnの回帰木やランダムフォレスト回帰のクラスには、Feature Importances (FI) という説明変数の重要度を示す指標がある。これは、各説明変数による予測誤差の二乗平均の減少量に対して、データ点数の重みを掛けて求めた値である。
Windows10のPowerShellでAnaconda Pythonを使う方法
·3581 文字·8 分
Windows10のPowerShellでAnaconda Pythonを使うための手順をまとめた。
KerasのステートフルRNNで学習を高速化する
·3032 文字·7 分
KerasのステートフルRNNについて解説する。
Kerasの時系列予測でgeneratorを使って大容量データを扱う 前編
·2669 文字·6 分
Kerasの時系列予測で、Recurrentレイヤに入力するためのデータを生成するgeneratorクラスの作り方について述べる。