QCプラネッツ 品質のプロフェッショナルを育成するサイト

【重要】主成分分析が導出できる

多変量解析

「主成分分析をどうやって理解すればよいかわからない、固有値・固有ベクトルの説明があるが、イメージがつかめない」などと困っていませんか?

こういう疑問に答えます。

本記事のテーマ

【重要】主成分分析が導出できる

おさえておきたいポイント

  • ①【重要】主成分分析とは何か?が理解できる
  • ➁【重要】主成分分析は自分で導出できる
  • ➂「主成分分析=固有値問題」と暗記するな!
  • ➃主成分方向を理解する
主成分分析は自分で解けます!
Excelや固有値、因子負荷量とか暗記不要!
自力で導出できるぜ!
主成分分析と重回帰分析の違いは説明できますか?
他の手法との違いも説明できますか?
主成分分析は自分で導出できたら
何でも説明できるぜ!

主成分分析を自分のものにしたいので、わかりやすく解説します。紙と鉛筆で解けます!

①【重要】主成分分析とは?

主成分分析はデータを要約するもの

主成分分析の目的は、

「主成分分析はデータを要約するもの
散布したデータの情報量が集まった方向を探す手法で
平方和を使って方向を探す」

ここはしっかり理解しましょう。

下図のように、青丸データが散布しており、その散布したデータからできるだけ多くの情報量が乗った方向を探し、散布したデータを集約させます。

主成分分析

その集約した方向が主成分方向であり、
それと垂直な方向は誤差方向であり、
主成分方向は情報量を最大化
誤差方向は情報量を最小化
させるのが主成分方向の目的です。

主成分分析

固有値から考える主成分分析がわからなくなる

主成分分析の解法を取得する時にどうしても
固有値を求める固有方程式や
固有ベクトルのイメージ
が強くなりがちです。

「主成分分析は固有値問題」
を条件反射的にインプットすると
かえって主成分分析が理解しにくくなる

大事なのは、

平方和を使って情報量が多い方向を探す条件式を作ったら、結果的に固有方程式ができるだけの話。
メインは、情報量が多い方向を探すこと
サブは、固有方程式を解く
とメイン、サブの関係を意識しましょう。

固有方程式を解く流れはできるだけあっさり解説して、
メインの情報量が多い方向を探すところをQCプラネッツではしっかり解説します。

重回帰分析との違いは何か?

よく同じデータが用意されると、
「重回帰分析」と「主成分分析」は何が違うの?
何で違う分析手法があるの?」

混乱します。

\(x_1\) \(x_2\) \(x_3\) \(y\)
1 2 3 6
3 6 8 15

上表のようなデータがあって、
問1:重回帰分析せよ。
問2:主成分分析せよ。
と来たら、それぞれ分析手法の違いを理解しながら解けますか?

主成分分析は、平方和から
散布したデータを要約する手法
重回帰分析は、平方和から
散布したデータを誤差が最小になるように回帰直線を引く手法

大事なのは、

1つの手法を勉強する時は、
周囲の他の手法との違いを比較しながら
学ぶと理解が深まる!

では、主成分分析の解説をスタートさせます!

➁【重要】主成分分析は自分で導出できる

2次元でデータの情報量を最大化する方向を立式

下図のように、点在するn個のデータのうち、
●座標P(\(x_i,y_i\))
●平均座標A(\(\bar{x},\bar{y}\))
●主成分方向の単位ベクトル \( \vec{e} \)
●PAと主成分方向との角θ
●主成分方向の長さ\(z_i\)を情報量として評価する
を定義します。

主成分分析

まず、主成分方向の単位ベクトル \( \vec{e} \)を
\( \vec{e} \)=\(
\left(
\begin{array}{c}
a \\
b
\end{array}
\right)
\)
と定義します。

単位ベクトルなので、

\(a^2+b^2\)=1
です。この条件式はあとで何度も使います。

情報量\(z_i\)の式を作る

次にまず、内積\( \vec{AP} \)・\( \vec{e} \)を計算します。
内積は高校数学の範囲ですね。

内積\( \vec{AP} \)・\( \vec{e} \)
=\(
\left(
\begin{array}{c}
x_i-\bar{x} \\
y_i-\bar{y}
\end{array}
\right)
\)・\(
\left(
\begin{array}{c}
a \\
b
\end{array}
\right)
\)=\(a(x_i-\bar{x})+b(y_i-\bar{y})\)

一方、内積\( \vec{AP} \)・\( \vec{e} \)は
\( \vec{AP} \)・\( \vec{e} \)=|\( \vec{AP} \)||\( \vec{e} \)|\(cosθ\)
です。ここで、単位ベクトルの大きさ|\( \vec{e} \)|=1なので、
\( \vec{AP} \)・\( \vec{e} \)=|\( \vec{AP} \)|\(cosθ\)
=|\(z_i\)|
とうまくつながります。

つまり、図と内積から

|\(z_i\)|=\(a(x_i-\bar{x})+b(y_i-\bar{y})\)
です。これが散布したデータを要約した情報量の元となります。

|\(z_i\)|は\(i\)番目の情報量で全体の情報量を最大化する条件式を作りたいので、
2乗和を取ります。何か平方和っぽいですが常套手段です。

情報量\(S\)の式を作る

情報量\(S\)は
\(S\)=\(\sum_{i=1}^{n}|z_i^2|\)
と書けるので、これを解いていきましょう。

\(S\)=\(\sum_{i=1}^{n}|z_i^2|\)
=\(\sum_{i=1}^{n} (a(x_i-\bar{x})+b(y_i-\bar{y}))^2\)
=\(a^2\)\(\sum_{i=1}^{n} (x_i-\bar{x})^2\)
+2\(ab\)\(\sum_{i=1}^{n} (x_i-\bar{x})(y_i-\bar{y})\)
+\(b^2\)\(\sum_{i=1}^{n}(y_i-\bar{y})^2\)
=\(a^2 S_{xx}\)+2\(ab S_{xy}\)+\(b^2 S_{yy}\)

ここで、散布データは固定なので、
●\( S_{xx}, S_{xy}, S_{yy}\)は定数
●\(a,b\)は変数
な点に注意ください。

まとめると、

情報量\(S\)=\(a^2 S_{xx}\)+2\(ab S_{xy}\)+\(b^2 S_{yy}\)
ただし、\(a^2+b^2\)=1

この条件で情報量\(S\)を最大化(極値)をもつ条件式を求めたいので、
困ったときの「ラグランジュの未定係数法」を使って条件式を求めてみましょう。

ラグランジュの未定係数法を使って条件式を決める

ラグランジュの未定係数は簡単にいうと

\(g(a,b)\)=0のもとで、\(f(a,b)\)を最大化したいという
等号制約付きの場合、
関数\(L(a,b,λ)\)=\(f(a,b)\)-\(λg(a,b)\)と置いて、
●\(\displaystyle \frac{\partial L}{\partial a}\)=0
●\(\displaystyle \frac{\partial L}{\partial b}\)=0
●\(\displaystyle \frac{\partial L}{\partial λ}\)=0
を同時に満たす解が最大化させる解となる。

情報量\(S(a,b)\)は
\(g(a,b)\)=\(a^2+b^2\)-1=0のもと、
\(S(a,b)\)= \(a^2 S_{xx}\)+2\(ab S_{xy}\)+\(b^2 S_{yy}\)を最大化させたいので、
関数\(L(a,b,λ)\)=\(S(a,b)\)-\(λg(a,b)\)と置いて、
●\(\displaystyle \frac{\partial L}{\partial a}\)=0
●\(\displaystyle \frac{\partial L}{\partial b}\)=0
●\(\displaystyle \frac{\partial L}{\partial λ}\)=0
を同時に満たす方程式を解いてみましょう。

関数\(L(a,b,λ)\)=\(S(a,b)\)-\(λg(a,b)\)
\(L(a,b,λ)\)=(\(a^2 S_{xx}\)+2\(ab S_{xy}\)+\(b^2 S_{yy}\))-\(λ\)(\(a^2+b^2\)-1)
より、条件式は
●\(\displaystyle \frac{\partial L}{\partial a}\)=\((2aS_{xx}+2bS_{xy})\)-\(λ2a\)=0
●\(\displaystyle \frac{\partial L}{\partial b}\)=\((2aS_{xy}+2bS_{yy})\)-\(λ2b\)=0
●\(\displaystyle \frac{\partial L}{\partial λ}\)=-\((a^2+b^2-1) \)=0

上の2つの式を整理して、行列表記します。
\(\left(
\begin{array}{cccc}
S_{xx} & S_{xy} \\
S_{xy} & S_{yy}
\end{array}
\right)
\)\(\left(
\begin{array}{cccc}
a \\
b
\end{array}
\right)
\)=\(λ\)\(\left(
\begin{array}{cccc}
a \\
b
\end{array}
\right)
\)
となり、よく見ると、
2次元の固有方程式になっているのがわかりますね。

➂「主成分分析=固有値問題」と暗記するな!

情報量最大化条件が固有方程式になっただけ

情報量が最大化する条件をラグランジュの未定係数法から導出すると、
●\(\left(
\begin{array}{cccc}
S_{xx} & S_{xy} \\
S_{xy} & S_{yy}
\end{array}
\right)
\)\(\left(
\begin{array}{cccc}
a \\
b
\end{array}
\right)
\)=\(λ\)\(\left(
\begin{array}{cccc}
a \\
b
\end{array}
\right)
\)
●\(a^2+b^2\)=1
となりました。

つまり、

情報量の最大化の条件式が
結果的に固有方程式になっただけで
主成分方向は固有値、固有ベクトルから
話をスタートさせないこと!

固有値や固有ベクトルをイメージしても主成分分析は理解できない

よく、固有値や固有ベクトルを可視化して、解法のイメージをわかりやすく解説する教科書やサイトが多いのですが、結局、その向きの意味がよくわからないから、主成分分析って何をやるものかが甘いになってしまいます。

このあいまいさがQCプラネッツ自身苦しんできました。なので、固有方程式ではなく主成分分析の意図がより伝わる導出方法を本記事で解説しています。

情報量の最大化の条件式が
結果的に固有方程式になっただけで
主成分方向は固有値、固有ベクトルから
話をスタートさせないこと!

固有方程式は淡々と解けばいい

固有方程式は
線形代数の代表選手なので、
主成分分析よりインパクト強いです。
だから
「主成分分析」=「固有値問題」
と認識しがちです。

はっきり言って、

いろいろな場面で
固有方程式が出て来るけど、
固有値、固有ベクトルそのものにはあまり意味はないと
冷静に見た方が、
各手法の本質が理解しやすい

固有方程式は淡々と解けばよいです。

本記事では、文字式で方程式導出まできましたが、この後の解法は、
関連記事で具体的な数字を使って解いた方がわかりやすいので、
関連記事で解説します。

➃主成分方向を理解する

n次元ならn個の主成分方向がある

n次元の固有方程式では、n個の固有値と固有ベクトルが計算できます。
(関連記事で具体的な値を使って解いた方がわかりやすいです)

なるべく少ない方向でたくさんの情報量が集めたいけど、数学的には、変数の数だけベクトルが解として出て来ます。

イメージは下図のとおりです。

主成分分析

n個の方向が出て来る理由は、

第1方向である程度情報量を要約したら
その垂直な第2方向で情報量を要約する。
これを繰り返して、
第n方向で情報量を要約して
全データを要約するイメージ

と考えると理解しやすいです。

主成分方向は互いに直交する

それぞれの主成分方向はなぜか直交します。これは固有値解の特性でもありますが、関連記事で具体例を挙げながら確かに直交することを確認しましょう。

主成分負荷量で方向の優先順位をつける

主成分方向は固有値解の個数だけあるので、
優先順位をつけたくなります。

寄与率や平方和、因子負荷量などの変数を使って評価していきます。これも関連記事で解説します。

以上、主成分分析の導出に必要なエッセンスを2次元の事例を使って解説しました。

主成分分析とは、散布データから
情報量を要約するもの。
情報量を最大限に要約する条件式が固有方程式になる。
主成分方向は固有ベクトルから求められるが、
「主成分分析=固有値問題」と暗記すると
主成分分析の本質がぼやけるので要注意!

を強くお伝えしました。

まとめ

「【重要】主成分分析が導出できる」を解説しました。

  • ①【重要】主成分分析とは何か?が理解できる
  • ➁【重要】主成分分析は自分で導出できる
  • ➂「主成分分析=固有値問題」と暗記するな!
  • ➃主成分方向を理解する


Warning: count(): Parameter must be an array or an object that implements Countable in /home/qcplanets/qcplanets.com/public_html/wp-content/themes/m_theme/sns.php on line 119

    Warning: Invalid argument supplied for foreach() in /home/qcplanets/qcplanets.com/public_html/wp-content/themes/m_theme/sns.php on line 122
error: Content is protected !!