こんにちは、えびかずきです。
今回は主成分分析の原理について説明していきたいと思います。
こんな人におすすめ:
・主成分分析について感覚的に原理を理解したい
・はじパタ9章がいまいち理解できなかった
主成分分析の感覚的な説明
主成分分析とは、簡単にいうと学習データの分散が最大になるように空間を回転させた時の”軸”について考察する分析手法です。
たとえば、下のような2次元のデータで考えてみましょう。
このデータは横軸にアヤメの花びらの長さ(petal lengh)を、縦軸に花びらの幅(petal width)をプロットしたグラフです。
さてこのプロットを見てまず感じるのが、花びらの長さ(petal lengh)と花びらの幅(petal width)のデータは相関がかなり高そうだということです。
もしデータ分析の目的が品種のクラス分け問題であったなら、この二つのデータは相関が高いのでそのまま使うのは効率が悪いです。
2つのデータだけであればあまり不便さは感じないかもしれませんが、仮にアヤメに関するデータが「がくのサイズ」や「葉」、「色」など他にもたくさん手元にあったなら、データ処理の負担を考えて、なるべく使う特徴量を減らしたいというモチベーションが湧いてくるはずです。
そこで登場するのが主成分分析です。
どういうことかというと、この二つのデータは相関が高いので特徴量として下に示した分散(データの広がり)が最も大きくなる方向に軸をとって、その方向のデータのみを使うことにしても問題ないだろうという発想なわけです。
ちなみにはじパタには「”分散が最大になる方向へ射影することと、4.1.3項で説明したデータの無相関化は同じことであり・・・”」とありますが、
これはつまり分散が最も大きくなる方向に軸を選ぶという行為は、すなわち相関係数がゼロになるように軸を選ぶことと同じですと、ということを言っています。
相関係数とは視覚的には下図のような傾向があります。
感覚的に言えば、相関係数ゼロというのは軸に対する対称性が高い状況を表しています。
数学的な証明は割愛しますが、要するに分散が最大になるような軸を選べば、軸に対してデータの広がりが対称的になって、それは相関係数がゼロであるということを表しているわけです。
そしてその軸を選ぶという操作は、視覚的にはグラフを回転させるということになります。
ここでは感覚的に理解しやすいように2次元のデータで説明しましたが、これは3次元、4次元と次元を拡張していっても原理は同じです。
それを線形代数で抽象的に説明したのが「はじパタ」の内容というわけです。
主成分分析の中身が理解できたところで、上のデータを主成分分析にかけてみましょう。
その結果がこちらです。
結果として、最初のグラフが右に少し回転して新たな軸を作ることで、1stPC(第1主成分)方向で分散が最大、相関係数はゼロになっていることがわかっていただけると思います。
主成分分析の原理
ではどうやって主成分を決めれば良いでしょうか。
それは、分散が最大になる方向を決めれば良いので、この条件で方程式を作ってそれを解けば良いわけです。
ここでは、できるだけ具体的に例を示すために上の二次元プロットでその手順を考えてみましょう。
まず、図1にプロットしている学習データの一つを、
\(\textbf {x_i} = \begin{pmatrix} x_{i1}\\x_{i2}\\\end{pmatrix} \qquad (i=1,2,3,…,N)\)
添字の1と2は花びらの長さと幅の次元を表す
とベクトルで表記することにします。
次に、このデータが全部でN個あるとした時、その全てを”縦”に並べて行列をつくると、
\(\textbf {X} = \begin{pmatrix} x_{11}&x_{12}\\x_{21}&x_{22}\\…&…\\x_{N1}&x_{N2}\\\end{pmatrix} \)
\(\textbf {X}\)は、転置した\(\textbf {x_i^T}\)が縦に並んでいることに注意。
となる。
これにそれぞれの軸の平均値を並べたベクトル
\(\overline{\textbf{x}}=\begin{pmatrix} \overline x_{1}\\\overline x_{2}\\\end{pmatrix}\)
を差し引くことで中心化して、
\(\textbf {X} = \begin{pmatrix} x_{11}-\overline{x}_1&x_{12}-\overline{x}_2\\x_{21}-\overline{x}_1&x_{22}-\overline{x}_2\\…&…\\x_{N1}-\overline{x}_1&x_{N2}-\overline{x}_2\\\end{pmatrix} \)
とあらわす。
これに、とある”単位”ベクトル(これが後に第1主成分の単位ベクトルとなる)
\(\textbf a_j=\begin{pmatrix} a_{j1}\\a_{j2}\\\end{pmatrix}\)
を右からかけて、
\(\overline{\textbf {X}}\textbf {a}_j=\begin{pmatrix} x_{11}-\overline{x}_1&x_{12}-\overline{x}_2\\x_{21}-\overline{x}_1&x_{22}-\overline{x}_2\\…&…\\x_{N1}-\overline{x}_1&x_{N2}-\overline{x}_2\\\end{pmatrix}\begin{pmatrix} a_{j1}\\a_{j2}\\\end{pmatrix}\)
\(=\begin{pmatrix} a_{j1}(x_{11}-\overline{x}_1)+a_{j2}(x_{12}-\overline{x}_2)\\a_{j1}(x_{21}-\overline{x}_1)+a_{j2}(x_{22}-\overline{x}_2)\\…\\a_{j1}(x_{N1}-\overline{x}_1)+a_{j2}(x_{N2}-\overline{x}_2)\\\end{pmatrix}=\textbf{s}_j\)
というベクトルをつくる。
このベクトルが何かというと、中心化した訓練データのベクトルそれぞれの単位ベクトル\(\textbf a_j\)への射影を並べたものである。
なぜなら、中心化した訓練データベクトルと単位ベクトル\(\textbf a_j\)との内積が取られているからです。
よって、今考えている問題はこの\(\textbf{s}_j\)の分散が最大になる\(\textbf{a}_j\)を求めれば良いということになる。
\(\textbf{s}_j\)の分散を求めると、
\(Var[\textbf{s}_j]=\dfrac{1}{N}\textbf{s}_j^T\textbf{s}_j=\dfrac{1}{N}\textbf{a}_j^T\overline{\textbf{X}}^T\overline{\textbf{X}}\textbf{a}_j=\dfrac{1}{N}\textbf{a}_j^T Var[\overline{\textbf{X}}]\textbf{a}_j\)
となる。
ここで、\(\textbf a_j\)は単位ベクトルであるという制約条件があるので、
\(Var[\textbf{s}_j]\)を最大化するという問題は、ラグランジュの未定乗数法で解くことができる。
※ラグランジュの未定乗数法がわからない人は、この辺りの記事が参考になると思います。Technical Note – ラグランジュの未定乗数法
この時のラグランジュ関数は、
\(E(\textbf{a}_j)=\textbf{a}_j^T Var[\overline{\textbf{X}}]\textbf{a}_j-λ(\textbf{a}_j^T\textbf{a}_j-1)\)
λはラグランジュの未定乗数、結果的にこれが分散になる
となるので、この\(E\)を\(\textbf a_j\)で微分してゼロとおいたものが、導きたかった方程式である。
結果として式を整理すると、
\(Var[\overline{\textbf{X}}]\textbf{a}_j=λ\textbf{a}_j\)
となる。
これは結局、訓練データの共分散行列の固有値を解くということと同義です。
これを解くと解が次元の数(ここでは2)だけ出てくるので、その中で固有値が最大のものが第1主成分となります。
※この方程式の解き方は、線形代数のテキストをひらけば必ず出てきます。
まとめ
今回は主成分分析の原理について説明しました。
はじパタには分析手法の一般性が保たれるように線形代数で抽象的に説明されていますが、いきなり抽象的なところから入ると必ず理解に苦しみます。
はじパタはよくまとまっていて機械学習の体系的な基礎が得られる一方で、ここで書いたような具体的で感覚的な説明が極端に少なく、初心者ごろしな内容となっています。
割と数学には自信のある筆者でも、すんなりと読むことはできません。
躓きつつ2、3回繰り返し読んで、「ああここはそういうことか・・」とだんだんわかってくるような感じです。
読み進めるにあたっては、ネットや入門書籍などをあたって感覚的な理解を事前にするのがお勧めです。
コメントを書く