本記事は機械学習の徹底解説シリーズに含まれます。
初学者の分かりやすさを優先するため,多少正確でない表現が混在することがあります。もし致命的な間違いがあればご指摘いただけると助かります。
はじめに
PLSは線形回帰分析を行うための手法の一つです。一般に,線形回帰では以下のような問題が起こります。
- 説明変数に相関がある場合に多重共線性が生じる
- サンプル数が極端に少ない場合にモデルが一意に定まらない
- データに含まれるノイズから大きな影響を受ける
これらの問題を解決するため,PLSでは以下のような処方箋を出します。
- 説明変数に相関がある場合に多重共線性が生じる
-
無相関な新しい説明変数(潜在変数)を用いる
- サンプル数が極端に少ない場合にモデルが一意に定まらない
-
全てのデータを踏まえて生成された潜在変数を少数用いる
- データ含まれるノイズに大きな影響を受ける
-
重要度(標準回帰係数)の高い潜在変数から順番に用いる
マクロな視点
本節では,PLSをマクロな視点から眺めます。PLSは2つのフェーズからなります。
- 潜在変数抽出フェーズ
- 回帰誤差最小化フェーズ
従来の回帰分析では,回帰誤差最小化フェーズのみで回帰式を求めていました。これは最小二乗法に相当します。しかし,それでは説明変数に相関があった場合に回帰式が不安定になる多重共線性が生じてしまいます。そこで,PLSでは入力変数を他の空間に射影することで新しい入力変数を生成します(潜在変数抽出フェーズ)。回帰式は,その新しい入力変数と目的変数の誤差を最小化するように求められます(回帰誤差最小化フェーズ)。
それでは,新しい入力変数はどのように抽出すれば良いのでしょうか。愚直に考えれば「元のデータをよく表すような射影」を利用すればよく,これは射影後のデータの分散が最大になるように潜在変数を抽出する主成分分析を利用すれば良いです。しかし,PLSの目的はあくまでも回帰式を求めることです。元のデータをよく表せるかどうかは大した問題ではなく,大事なのは「目的変数をよく表せられるかどうか」です。そこで,PLSでは「目的変数との内積(関連度)が最大になるように」潜在変数を抽出します。
PLS1モデルでは,説明変数のみを潜在変数で表します。一方,PLS2モデルでは目的変数も別の潜在変数で表すことで,より表現力を高めた分析が可能になります。以下では,PLS1モデルについて説明します。
ミクロな視点
本節では,PLSを定式化します。
潜在変数抽出フェーズ
PLSでは,元のデータ$\mX \in \mathbb{R}^{N \times D}$の線形結合として潜在変数$\mZ \in \mathbb{R}^{N\times \tilde{D}}$を抽出します。抽出された潜在変数を用いて,目的変数$\vy \in \mathbb{R}^{N \times 1}$を表します。ただし,ここでは簡単のため目的変数は1次元(1つの特徴量)で表されるとしています。まずは,潜在変数を抽出しましょう。
\mZ &= \mX \mW \label{PLS1}
\end{align}
ただし,$\mW \in \mathbb{R}^{D\times \tilde{D}}$とし,$\mW$の要素$\vw_{\tilde{d}}$は$|\vw_{\tilde{d}}|^2=1$を満たすように正規化されているものとします。以下では,主成分分析と同様に潜在変数を逐次推定していくことを考えます。ですので,式($\ref{PLS1}$)を成分ごとに考えます。ただし,ここでいう「成分」というのは,サンプル数$N$方向ではなく潜在次元$\tilde{D}$(特徴量の個数)方向であることに注意してください。以下では,一般に$r$番目の潜在変数を抽出するフェーズを想定します。
\vz_{(r)} &= \mX_{(r)} \vw_{(r)} \label{z}
\end{align}
ただし,$\vz_{(r)}\in \mathbb{R}^{N \times 1}$,$\mX_{(r)} \in \mathbb{R}^{N \times D}$,$\vw_{(r)}\in \mathbb{R}^{D \times 1}$になります。$X_{(r)}$は$r-1$番目までの潜在変数(の線形和で表される変数)によって表現された部分を引いた(これは後述するデフレーションという操作に相当)説明変数であることに注意してください。このとき,PLSでは以下のような回帰式に基づいて,潜在変数の線形和で$\mX_{(r)}$と$\vy_{(r)}$を表そうとします。
\mX_{(r)} &= \vz_{(r)} \vs_{(r)}^{T} + \mE_{(r)} \label{PLS2}\\[0.7em]
\vy_{(r)} &= \vz_{(r)} t_{(r)} + \vf_{(r)} \label{PLS3}
\end{align}
ただし,$\vs_{(r)} \in \mathbb{R}^{D \times 1}$,$\mE_{(r)} \in \mathbb{R}^{N \times D}$,$\vy_{(r)} \in \mathbb{R}^{N\times 1}$,$t_{(r)} \in \mathbb{R}$,$\vf_{(r)} \in \mathbb{R}^{N \times 1}$です。$\vy_{(r)}$は$\mX_{(r)}$と同様に後述するデフレーション操作後の目的変数であることに注意してください。ここで,PLSでは目的変数との内積(関連度)が最大になるように潜在変数$\vz_{(r)}$を抽出します。
\text{(目的変数と潜在変数の内積)} = \vy_{(r)}^T \vz_{(r)} = \vy_{(r)}^T \mX_{(r)} \vw_{(r)}
\end{align}
係数$\vw_{(r)}$に関して$|\vw_{(r)}|^2=1$という条件があることを踏まえれば,ラグランジュの未定乗数法を利用して以下の目的関数$G_{(r)}$を得ます。
G_{(r)} &= \vy_{(r)}^T \mX_{(r)} \vw_{(r)} - \lambda_{(r)} \left( |\vw_{(r)}|^2 - 1 \right)
\end{align}
ただし,$\lambda_{(r)} \in \mathbb{R}$です。$G_{(r)}$を$\vw_{(r)}$で偏微分したものを$0$とおきましょう。
\frac{\partial G_{(r)}}{\partial \vw_{(r)}} = \mX_{(r)}^T \vy_{(r)} - 2\lambda_{(r)} \vw_{(r)} = 0
\end{align}
したがって,$\vw_{(r)}$は以下のように求められます。
\vw_{(r)} &= \frac{\mX_{(r)}^T \vy_{(r)}}{2\lambda_{(r)}} \label{ラグランジュ}
\end{align}
ここで,$\vw_{(r)}$は$|\vw_{(r)}|^2=1$を満たす単位ベクトルでした。式($\ref{ラグランジュ}$)に注目すると,$\vw_{(r)}$の方向は$\mX_{(r)}^T \vy_{(r)}$で決まっており,$2\lambda_{(r)}$が正規化項として機能していることがわかります。これらを踏まえれば,$\vw_{(r)}$は以下のような形になることが分かります。
\vw_{(r)} &= \frac{\mX_{(r)}^T \vy_{(r)}}{|\mX_{(r)}^T \vy_{(r)}|}
\end{align}
重み$\vw_{(r)}$が計算できれば,式($\ref{z}$)を利用して$\vz_{(r)}$が求められます。
\vz_{(r)} = \mX_{(r)} \vw_{(r)} = \frac{\mX_{(r)} \mX_{(r)}^T \vy_{(r)}}{|\mX_{(r)}^T \vy_{(r)}|}
\end{align}
回帰誤差最小化フェーズ
さて,我々が知りたいのは式($\ref{PLS2}$)と式($\ref{PLS3}$)における$\vs_{(r)}$と$t_{(r)}$です。これらは,単純に最小二乗法で求めます。すなわち,$\mE_{(r)}$と$\vf_{(r)}$の二乗和が最小になるような$\vs_{(r)}$,$t_{(r)}$を求めます。ここで最小二乗法が登場するため,おそらく「部分的」最小二乗法と呼ばれているのでしょう。
|\mE_{(r)}|^2 &= |\mX_{(r)} - \vz_{(r)} \vs_{(r)}^{T}|^2 \\[0.7em]
|\vf_{(r)}|^2 &= |\vy_{(r)} - \vz_{(r)} t_{(r)}|^2
\end{align}
これは正規方程式に帰着しますので,解は以下のようになります。
\vs_{(r)} &= \frac{\mX_{(r)}^T \vz_{(r)}}{\vz_{(r)}^{T} \vz_{(r)}} \\[0.7em]
t_{(r)} &= \frac{\vy_{(r)}^T \vz_{(r)}}{\vz_{(r)}^{T} \vz_{(r)}}
\end{align}
ここまでで1番目の潜在変数と,それに対応する係数が求められ,回帰式が計算できたことになります。PLSでは,ここから2番目以降の潜在変数を抽出していきます。
そもそも,PLSでは潜在変数が無相関になるように抽出する必要がありました。そこで,2番目以降の潜在変数を抽出する際には元のデータ・目的変数のそれぞれから抽出された潜在変数の成分を引き算するデフレーションという操作を行う必要があります。これは要するに,次の潜在変数を抽出するときは残差$\mE_{(r)}$,$\vf_{(r)}$をそれぞれ$\mX_{(r+1)}$,$\vy_{(r+1)}$として扱ういうことを意味しています。デフレーションを行うことで,過去に用いた潜在変数方向の要素がなくなるため,元のデータにおいて「既知の潜在変数以外の要素」が抽出されることになります。
\mX^{(r+1)} &= \mE_{(r)} = \mX_{(r)} - \vz_{(r)} \vs_{(r)}^{T} \\[0.7em]
\vy^{(r+1)} &= \vf_{(r)} = \vy_{(r)} - \vz_{(r)} t_{(r)}
\end{align}
デフレーション後のデータに対して同様の手法で潜在変数を抽出すれば,元のデータに既知の潜在変数方向の要素は含まれていませんので,新しく抽出される潜在変数と既知の潜在変数は無相関になります。
寄与率
PCA同様,PLSでも寄与率を計算できます。PLSでは,潜在変数の線形和で表された変数と,説明変数・目的変数との二乗和を最小にしますので,寄与率に関しても説明変数と目的変数の2種類を算出する必要があります。
C_{(r)}^{X} &= \frac{\sum_{n=1}^{N}\sum_{d=1}^{D} \left( X^2_{(r)nd} - X^2_{(r+1)nd} \right) }{\sum_{n=1}^{N}\sum_{d=1}^{D}X^2_{nd}} \\[0.7em]
C_{(r)}^{y} &= \frac{\sum_{n=1}^{N} \left( y^2_{(r)n} - y^2_{(r+1)n} \right) }{\sum_{n=1}^{N} y^2_{n}}
\end{align}
この寄与率の意味は,デフレーションによってどれだけの二乗和が引かれたかを表しています。$r$回目のデフレーションによって大きな値が引かれれば引かれるほど,$r$回目の変数はよく説明変数・目的変数を表していることになるからです。
アルゴリズム
最後に,定式化で導出した結果をアルゴリズムとしてまとめておきます。
- データを前もって正規化しておく
- $r=1$とおき,$\mX_{(1)}=\mX$,$\vy_{(1)}=\vy$の初期化を行う
- $\vw_{(r)} = \mX_{(r)}^T \vy_{(r)} / |\mX_{(r)}^T \vy_{(r)}|$を計算する(潜在変数の変換係数)
- $\vz_{(r)} = \mX_{(r)} \vw_{(r)}$を計算する(潜在変数)
- $\vs_{(r)} = \mX_{(r)}^T \vz_{(r)} / \vz_{(r)}^T \vz_{(r)}$を計算する(スコア)
- $t_{(r)} = \vy_{(r)}^T \vz_{(r)} / \vz_{(r)}^T \vz_{(r)}$を計算する(回帰係数)
- 新たに$\mX_{(r+1)} = \mX_{(r)} - \vz_{(r)} \vs_{(r)}^T$,$\vy_{(r+1)} = \vy_{(r)} - \vz_{(r)} t_{(r)}$とおく(デフレーション)
- 手順3.に戻る
PLSでは一般の機械学習同様,過学習が起こることがあります。そのため,交差検証などを用いて適切な潜在変数の個数(手順2.〜6.を何回繰り返すか)を選択する必要があります。潜在変数の評価には標準回帰係数が用いられることが多いですが,本記事ではその導出は割愛します。
ポイント
最後に,重回帰分析・主成分回帰とPLSを比較することでまとめに代えます。
- 重回帰分析と何が違うの?
-
重回帰分析には潜在変数抽出フェーズがなく,予測値と学習データの誤差に従って回帰式を求めます。そのため,説明変数に相関がある場合は多重共線性の問題が生じてしまいます。なお,全ての潜在変数を利用した場合は重回帰分析と等しくなります。
- 主成分回帰とは何が違うの?
-
主成分回帰は射影後のデータの分散が最大になるように主成分を抽出します。そのため,抽出された主成分が目的変数をよく表せられるかどうかは保証されません。一方で,PLSでは射影後のデータと目的変数の内積(関連度)が最大になるように主成分を抽出します。そのため,目的変数をよく表すことのできるような主成分を抽出する手法になっています。
- どのようなデータに使うと効果的なの?
-
冒頭でもお伝えした通り,入力変数に相関があるデータ,サンプル数が説明変数よりも少ないデータ,ノイズが含まれているデータなどにPLSを利用すると効果的に回帰分析を行うことができます。
コメント
コメント一覧 (2件)
とても勉強になりました。
細かいことですが潜在変数抽出フェーズのところで「説明変数Y~」とありますが目的変数のまちがいではないでしょうか。
青木様
ご指摘誠にありがとうございます!
修正させていただきました。