いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【KNIME】主成分分析したい

機械学習で多変量を扱う際に、変量(特徴量)を減らしたいことがある。

・Uncle Bernie's ruleというもので、学習に必要なデータの数は、説明変数の数の10倍以上は準備しましょうというもので、いたずらに特徴量や説明変数を増やしてモデルするのはよろしくないということらしい。

・モデル構築に際して、適切に情報を選抜・要約することが求められてくる。

・例えば、欠損の多い特徴量、分散の小さい特徴量などは、削ることを考慮した方が良い。

・情報を要約することも大切で、中でも頻繁に使われる手法が主成分分析(PCA)と呼ばれるものだ。

・いろいろなネット記事で私なりにPCAを以下のように解釈した。あってるかは知らない。

 

・主成分分析:データに対して、情報量(分散の大きさ)に応じて新しい軸(主成分)を取り直す作業。寄与率(軸の情報の保持力)の大きい主成分だけを取り出すことで、データの次元を減らす。
固有値:全部足すともとの次元数になる。主成分が含んでいるばらつき(≒情報)の大きさ。
固有ベクトルeigenvector:新たに引き直した軸(主成分軸)の向き。固有ベクトルは互いに直交する。
・寄与率:固有値の占有率。ある主成分の分散が全ての分散に対して専有する割合。0-1の間。寄与率の大きい順に足したのを累積寄与率と呼び0.7-0.8以上になるまでの主成分が採用されることが多いみたい。
・主成分得点:元データを新しい軸(主成分軸)に打ち直した場合の得点。もとのデータを固有ベクトル軸に変換したやつ。
・主成分負荷量:変数の主成分に与える影響力。-1から1の間の値をとり、絶対値が大きいほど影響力が強い。

 

・何はともあれ、ワークフローを組んでみた(下図)。

f:id:choron81:20211127223702p:plain

・主成分分析する前に、Z-score normalizeしておいた。

・得られた値をPCA Computeノードに放り込むと、上の出力ポートで相関のマトリックス(Covariance Matrix)、真ん中の出力ポートで固有値(Eigenvalue)と固有ベクトル(Eigenvector)が得られる。

・主成分得点を得る際には、PCA Applyノードに、PCA変換モデルとNormalize後のデータを放り込めば良い。

・寄与率は固有値の占有率なので、先の固有値からMath Formulaで算出し、累積寄与率はMoving Aggregationで算出すれば良い。

・図示するなり機械学習に供するなり、使い道はいろいろありそう。

 

終わり。