次元削減
source(here::here("R/setup.R"))
対数変換やBox-Cox変換などが単一のベクトルに対する特徴量エンジニアリングであったのに対し、ここで紹介する方法はモデルベースのアプローチになります。
可視化、データの圧縮、モデルに適した表現の作成など広い目的での利用が可能です。
高次元データと呼ぶことがあります。
これらのデータの問題として以下にあげるものがあります
- 計算時間の増加
- 予測性能の低下
- 変数重要度評価の複雑化
PCAやMDSなど入力に対して線形変換を行う線形変換の
他、
信号処理の分野で利用場面の多い非負値行列因子分解や独立成分分析 (independent component analysis: ICA)
探索的データ分析で触れたように、t-SNEも次元削減の一つのアプローチです。
高次元空間
特徴空間
主成分分析
主成分分析 (Principal Component Analysis: PCA) は
主成分と呼ばれる
特徴空間に含まれる情報を要約した特徴量を生成することが期待されます。
主成分分析のアルゴリズムでは、データの分散が最も大きいベクトルを探し出します。このベクトルはデータ中でより多くの情報を含んだもので、第1成分と呼びます。次に第1成分と直交する方向から、再び分散の大きな(情報をより含んだ)ベクトルを探索します (これを第2成分と呼ぶ)。
主成分分析ではこの作業を繰り返して高次元空間上のデータのばらつきを表現します。別な言い方をすると、高次元空間上でのデータの分散を可能な限り説明する互いに直交するベクトル(主成分)を作るです。これにより情報の圧縮を可能にします。主成分間は、直交するように決められます。したがって、主成分間には相関がありません(無相関)。相関の強い変数を入力とした場合、これらの相関を無視することが可能となります。
では、どれだけの主成分に重要な情報が含まれているのでしょうか。この目安に利用できるのが「寄与率」
主成分分析では、高次元な空間において個々のデータを表現するために「距離」を利用します。
特徴空間上では異なるスケールのデータが混ざることになります。そのため主成分分析を行う際には入力に使う変数を標準化しておく必要があります。
分散が最大となる
主成分を特徴量として利用できます。
主成分軸の寄与率を考慮して、主成分軸の何軸までを利用するか考えます。目安として寄与率が80%~90%あればデータの傾向を説明できると言われます。そのため、第一の基準として累積寄与率が90%となるまでの主成分軸上の得点、すなわち主成分得点を特徴量として扱うことが考えられます。
個々のデータの情報を可能な限り失わないよう、データ全体の関係を要約してくれます。
また、直行する主成分同士は
無相関になるため、
相関のある変数を圧縮するのにも効率的です。 さらに白色化と組み合わせて… 標準化することも
# ggplot2 PCで塗り分ける
非負値行列因子分解
非負値行列因子分解 (Non-negative Matrix Factorization: NMF) の基本は主成分分析と似ています。高次元空間の中からデータの分散が最も大きいベクトルを探すことです。
一方、主成分分析では個々の成分は互いに直交するものでなければなりませんでした。対してNFMでは係数と成分が非負であることを条件にします。
そのため入力に与える特徴量はいずれも0以上でなければなりません。
部分最小二乗法
- 入力変数だけでなく、目的変数も使用する
潜在意味解析
違うような…(テキストデータの文脈で解説)
まとめ
関連項目
参考文献
- Trevor Hastie, Robert Tibshirani and Jerome Friedman (2009). The Elements of Statistical Learning (翻訳 統計的学習の基礎. (共立出版))
- Sarah Guido and Andreas Müller (2016). Introduction to Machine Learning with Python A Guide for Data Scientists (O’Reilly) (翻訳 中田秀基訳 (2017). Pythonではじめる機械学習 scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎 (オライリー))