HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

多項式回帰と重回帰と多重共線性を考えてたらわからんくなった

 

 

follow us in feedly

https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png

はじめに

前回までに単回帰、多項式回帰を見てきました。

www.hellocybernetics.tech

www.hellocybernetics.tech

www.hellocybernetics.tech

さて、次は重回帰と呼ばれる手法に着手します。

重回帰というのは簡単に言えば入力変数が複数ある場合(多次元である場合)の回帰なのですが、 これまでの記事を読んできた方は既に重回帰の特殊な例と言えるものに触れています。

というのも、多項式回帰は見ようによっては重回帰のようなものだからです。

重回帰

問題設定

まず重回帰の基本的な設定としては、$D$次元のデータ$\mathbf x \in \mathbb R^D$とスカラー$y$があるときに、$D$次元のベクトル$\mathbf w \in \mathbb R^D$と、スカラー$b$を使って、$\mathbf x$と$y$の間の関係を $$ y = \mathbf{ w^Tx} + b $$ と表しておいて、$\mathbf w$と$b$を決定することです。

ここで、$\mathbf w$と$\mathbf x$の各成分を明示しておきましょう。ここでは簡単のために3次元だとして、 $$ \begin{align} \mathbf w &= (w_1, w_2, w_3)^T \\ \mathbf x &= (x_1, x_2, x_3)^T \\ \end{align} $$ としておきます。すると先程の重回帰の式は、以下のようになります。 $$ y = w_1x_1 + w_2x_2 + w_3x_3 + b $$

重回帰分析の勾配法による解法

重回帰分析の解法は、これまで通り勾配法を用いればとりあえずは上手くいくでしょう(どうだろうか?)。 $$ y = \mathbf {w^Tx} + b $$ と仮定しているのならば、実データ$\mathbf x_i, y_i$と仮定とのズレを $$ l_i = \{y_i - (\mathbf {w^Tx}_i + b)\}^2 $$ としておいて、全てのデータに関する総和(あるいはすべてのデータに関するズレの平均) $$ L(\mathbf w,b) = \frac{1}{N} \sum_{i=1}^N l_i = \frac{1}{N} \sum_{i=1}^N \{y_i - (\mathbf {w^Tx}_i + b)\}^2 $$ を最小化するように、$\mathbf w$と$b$を勾配法で探していくという戦略です。この基本的な考え方は単回帰のときと似たようなものなので割愛します。

www.hellocybernetics.tech

なんか勾配法って言うと難しそうに見えるかもしれないんですが、いや、むしろ簡単なんですね。 やることはいつも同じで、損失関数作ったらパラメータで微分して、求めた勾配を使って更新するだけですから。

真面目に方程式を解く解法

基本的には導いた損失関数を微分して$0$と置いた連立方程式を解くというのが解法になるのですが、多くの教科書では以下のようにベクトルと行列を使った表現で書かれます。 まずあるデータに関して、概ね以下のようになっていることを仮定している状況です。 $$ y_i = \mathbf {w^Tx}_i + b $$ ここで、$i$はデータのインデックスです。これをひたすら$N$個分だけ並べていくと、 $$ \begin{align} y_1 &= \mathbf {w^Tx}_1 + b \\ y_2 &= \mathbf {w^Tx}_2 + b \\ \vdots \\ y_N &= \mathbf {w^Tx}_N + b \end{align} $$ となりますが、$\mathbf y = (y_1,\cdots,y_N)^T$とおき(スカラーをベクトルの成分として格納)、$\mathbf X = (\mathbf {x_1,\cdots, x_N}) $とおき(ベクトルを行列の列として格納)、$\mathbf b = (b,\cdots,b)^T$とおけば(全部$b$で埋めた$N$次元ベクトル)、 $$ \mathbf {y^T} = \mathbf {w^TX} + \mathbf b $$ と表せてしまいます(単に表記をシンプルにしただけで書いてあることは同じです)。 もっとシンプルにするために、$\mathbf x' = (1, x_1, \cdots, x_D)^T$、$\mathbf w' = (b, w_1, \cdots, w_D)^T$($D$はデータの次元数)とおき、$\mathbf X' = (\mathbf {x'_1,\cdots, x'_N})$と置けば、 $$ \mathbf {y^T} = \mathbf {w’^TX'} $$ あるいは $$ \mathbf y = \mathbf {X’^Tw'} $$ と表せてしまいます。

重回帰では入力ベクトルを並べた行列$X'$と出力スカラーを並べたベクトル$y$に上記のような関係があることを期待しているわけですから、理想的には$\mathbf y - \mathbf {X’^Tw'}=\mathbf 0$であろうと想像しつつ、現実はそうではないので $$ L(\mathbf w) = \frac{1}{2}(\mathbf y - \mathbf {X’^Tw'})^2 $$ が最小化されるような$\bf w'$を求めます。微分して$0$と置いて解くことになります。(擬似逆行列を求めることになる)。

多くの教科書では今回とは$\mathbf X$とは行と列が反対になっていて、$\mathbf {y = Xw}$という表記になるようになってますが「$y = \mathbf {w^Tx}$」から始まってベクトルやスカラーをただ並べているだけということをイメージしやすくなるように文字を置きました(イメージしやすくなったのかな…?w)。

多項式回帰

さて、先程の重回帰の式をジッと見つめながら、多項式回帰の式を思い返してみましょう。 一番簡単な式の状態から見直しましょう。 $$ y = w_1x + w_2x^2 + w_3x^3 + b $$ こんな感じでしたね。$y$を$x$の多項式で表しましょうというのが多項式回帰でした。 これはすなわち、$x_1 = x, x_2 = x^2, x_3=x^3$と置いたら($\mathbf x = (x, x^2, x^3)^T$と置いたら)全く同じものになるということです。

多項式回帰というのは、重回帰の入力ベクトル$\mathbf x$の成分を$x$の累乗で埋めたような形式になっているということです。

もちろん、事実上、入力変数がたった1つ($x$のみ)で、$y$との関係が曲線になっていそうなときには多項式でフィッティングしてみるというのが基本的なモチベーションになります。また、入力変数が複数あるときに、それを重み付けして回帰をする(ベクトルの成分に格納して内積を取る)というのが重回帰の基本的なモチベーションになります。

それでも、重回帰をしようとした場合に複数の入力変数$x_1, x_2, x_3$たちが、偶然にも(知らずに)累乗の関係にあったりすることはないのでしょうか。そのようなときは重回帰をしようと思ったら、結果的に多項式回帰になっているかもしれませんね。

多重共線性

基本的事項

重回帰分析をする時、 $$ y = \mathbf{ w^Tx} + b $$ と置いた場合の$\mathbf x$の各成分に高い相関がある状態を「多重共線性」があると言います。

コレは通常悪いこととされています。

重回帰分析は解析的に解けます(つまり、パラメータを勾配法のような方法を使わなくとも、計算で一発で求められる)。しかし、仮に入力ベクトルの各成分の相関係数が$1$となってしまった場合には、逆行列の計算時に発散が生じます。つまり、もはや解を求められないということです。

相関係数が$1$とは言わないまでも、相関が相応に大きいときには、推定されるパラメータはかなり大きな値になってしまいます。この際、パラメータの推定誤差が極めて大きくなってしまうため、モデルの偏回帰係数(パラメータ)から何らかの解釈を行いたいときに、それが机上の空論に終わってしまうようなのです。

参考になりそうなリンクを貼っておきます。

多重共線性ってなんだったんだっけ?+正則化の話。 | 分析のおはなし。

多重共線性の意味を数式を使ってきちんと説明する - 具体例で学ぶ数学

例と疑問

例として、$\mathbf x = (x_1, x_2, x_3)$としたときに、$x_3 = x_1 - x_2$という関係にあるとしましょう(そしてデータを集めたときに、このことに気づかなかった場合)。これは入力ベクトルの各成分に明らかに相関があります。このときの重回帰の式は $$ \begin{align} y &= w_1x_1 + w_2x_2 + w_3x_3 + b \\ &= w_1x_1 + w_2x_2 + w_3(x_1-x_2) + b \\ &= (w_1+w_3)x_1 + (w_2-w_3)x_2 + b \end{align} $$ となっていることになります(しかし、データの各成分の関係など知る由もないため、最後の式に至ることは本人にはわからない)。

さて、真の関係性が仮に$y = 3x_1 + 2x_2$というものだったとしましょう。コレに対して重回帰の仮定は余分なデータ$x_3$を含んだ$y = w_1x_1 + w_2x_2 + w_3x_3 + b$となっているわけです。そしてその式は変数間の関係を認めると$y= (w_1+w_3)x_1 + (w_2-w_3)x_2 + b$となっています。

このときに重回帰を解いた場合、$y = 3x_1 + 2x_2$を表しうるような$w_1,w_2,w_3$ってどのようなものでしょう。$w_1=3, w_2=2, w_3=b=0$となればいいのですが、そうでないパターンでも表せてしまいませんでしょうか。$w_1=2, w_2=3, w_3=1$でも良いのです。そして何も知らないまま、$x_3$には$w_3=1$くらいの重みが掛かっているのだと錯覚してしまいます(そして他の成分に対する重みも錯覚してしまう)。 どんな解が得られるかなんてのは、ある意味、解法やアルゴリズムの選択によるものであって、データに本来内在している真実に由来しているわけではないはずです。

このように相関の高い変数を重回帰分析に混ぜ込んでしまうと、そのパラメータの意味は全く解釈不能になってしまうかもしれません

ところで、これは予測さえ当たれば良いのならば、どうでも良いことないのかもしれないとも思います。解が定まらないというのは冗長ということですが、近年は冗長なモデルを仮定して、上手くフィッティングさせていくという方法が活躍しているように思います。

統計には正直疎いので、この辺詳しい方いたらご教授頂きたいです(統計の立場での話は、多重共線性ってなんだったんだっけ?+正則化の話。 | 分析のおはなし。多重共線性の意味を数式を使ってきちんと説明する - 具体例で学ぶ数学で述べられていますが、実用的な立場での話などご存知であればお願いします)。

多項式回帰って大丈夫なの?

ところで、多項式回帰の話を出したのかというと、

  1. 重回帰分析の入力ベクトルの各成分を$x$の累乗で構成すれば多項式回帰になっている
  2. 一方で多重共線性という、重回帰分析時には入力ベクトルの各成分に相関が無い方が良い

ということでしたが、

$$\{x, x^2, x^3, x^4, ...\}$$

という多項式関数の集まりって十分に互いに相関があるように感じたからです。 フィッティング時に変な事が起こったりしないのかな…?と思った次第でございます。直交多項式でやったほうが良いのかな?何か勘違いしていそう…?教えてくださいな…。