※記事内に商品プロモーションを含むことがあります。
はじめに
Pythonの機械学習ライブラリScikit-learnに実装されている主成分分析のクラスを調べた。
本記事では、PCAクラスのパラメータ、属性とメソッドについて解説する。
主成分分析 (PCA, Principal Component Analysis)とは、データの分散をなるべく維持しつつ、データの次元を減らす手法である。
主成分分析について解説しているサイトは多数あるため、ここでは説明を省略する。
環境
Scikit-learn 0.20.3
主成分分析のクラス
Scikit-learnには、主成分分析はPCA
というクラスで実装されている。
|
|
以下、パラメータ、メソッド、属性を解説する。
パラメータ
パラメータの説明は以下の通り。
n_components
: int, float, None or string
整数を指定すると、圧縮後の次元数になる。
ソルバがfull
のとき、0~1の小数の指定が可能であり、n_components
の割合で分散を維持できるだけの最小の次元数が自動で選ばれる。
また、デフォルトのNone
では、fit
メソッドに与えるデータの、サンプル数と次元数の小さい値が選ばれる。
copy
: bool
False
ならば、fit
やfit_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)
fit
やfit_transform
で定義したPCAの変換を行う。
戻り値はサンプル数×n_components
の2次元配列。
inverse_transform(X)
PCAの逆変換を行う。
X
はサンプル数×n_components
の2次元配列。
戻り値はサンプル数×特徴量数の2次元配列。
属性
PCAクラスの主な属性は以下の通り。
components_
:
(n_components
)×(元の特徴量数)の2次元配列。
元の行列をX
とすると、transform
メソッドは以下の変換に等しい。
|
|
すなわち、X
の平均を0として、n_components
との内積をとる。
explained_variance_ratio_
:
個々の主成分の因子寄与率を表す、長さn_components
の1次元配列。
因子寄与率とは、データ全体の分散に対する個々の主成分の分散の割合である。
n_components
をNone
として全ての主成分を保存している場合、explained_variance_ratio_
の合計は1になる。
参考
sklearn.decomposition.PCA — scikit-learn 0.24.0 documentation