本章では,基礎的な機械学習手法として代表的な単回帰分析 と重回帰分析 の仕組みを、数式を用いて説明します.
ここで単回帰分析と重回帰分析を紹介することには 2 つの理由があります.
1 つ目は,回帰分析と重回帰分析の数学がニューラルネットワーク含めたディープラーニングの数学の基礎となるためです.
2 つ目は,単回帰分析のアルゴリズムを通して微分,重回帰分析のアルゴリズムを通して線形代数に関する理解を深めることができるためです.
単回帰分析
まずはじめに,単回帰分析について説明します.
機械学習手法は,教師あり学習 (supervised learning) ,教師なし学習 (unsupervised learning) ,**強化学習 (reinforcement learning)**に大別され,単回帰分析は教師あり学習に含まれます.
教師あり学習の中でも典型的な問題設定は 2 つに大別されます.
与えられた入力変数から,
10 10 10 や
0.1 0.1 0.1 といった実数値を予測する**回帰 (regression)
と、「赤ワイン」,「白ワイン」といったカテゴリを予測する 分類 (classification)**の 2 つです.
単回帰分析は回帰を行うための手法であり,1 つの入力変数から 1 つの出力変数を予測します.
それに対し,重回帰分析は,複数の入力変数から 1 つの出力変数を予測します.
この両手法は教師あり学習であるため,訓練の際には、入力変数
x x x と目的変数
t t t がペアで準備されている必要があります.
問題設定(単回帰分析)
まず,データに含まれる情報の中から何を利用し,何を予測させるかを決めます.
ここでは例として,家賃を予測する問題を考えることにします.
従って,家賃が
出力変数 y y y となります.
次に,
入力変数 として何を採用するかを考えます.
家賃の予測には,部屋の広さ,駅からの距離,犯罪発生率などを考慮する必要があると思われます.
ここでは部屋の広さを入力変数
x x x として採用することにします.
複数の入力変数の候補がある場合に,それらを同時に扱う方法は,次の重回帰分析の説明の際に紹介します.
多くの機械学習手法は,大きく分けて次の3ステップで構成されています.
Step1: モデルを決める
Step2: 目的関数を決める
Step3: 最適なパラメータを求める
上記の3ステップについて,順に説明していきます.
Step1. モデルを決める(単回帰分析)
まずはじめに、入力変数 x と出力変数 y との関係をどのように定式化するかを決定します.
この定式化したものをモデル もしくは数理モデル と呼びます.
どのように定式化すれば,家賃をうまく予測することができるのでしょうか.
このモデル設計は現在は人手で行うのが一般的であり,機械が自動的に決めてくれるわけではありません(ただし最近ではAutoMLなどモデルを自動決定するための研究も進展してきています).
例えば,家賃と部屋の広さの組で表されるデータを 3 つ集め,「家賃」を y 軸に,「部屋の広さ」を x 軸にとってそれらをプロットしたとき,次のようになっていたとします.
この場合,部屋が広くなるほど,家賃が高くなるという関係が予想されます.
また,この 2 変数間の関係性は直線によって表現を行うことができそうだと考えられます.
そこで、2 つのパラメータ
w w w と
b b b によって特徴づけられる直線の方程式
f ( x ; w , b ) = w x + b
f(x; w, b) = wx + b
f ( x ; w , b ) = w x + b
によって,部屋の広さと家賃の関係を表すことを考えます.
ここで,
w w w は
重み (weight) ,
b b b は**バイアス (bias)**の頭文字を採用しています.
単回帰分析では,このようにモデルとして直線
f ( x ; w , b ) = w x + b f(x; w, b) = wx + b f ( x ; w , b ) = w x + b を用います.
そして,2 つのパラメータ
w w w と
b b b を,直線がデータによくフィットするように調整します.
パラメータで特徴づけられたモデルを用いる場合,与えられた
データセット に適合するように最適なパラメータを求めることが目標となります.
今回はデータセットとして部屋の広さ
x x x と家賃
t t t の組からなるデータの集合を用います.
全部で
N N N 個のデータがあり,
n n n 番目のデータが
( x ( n ) , t ( n ) ) (x^{(n)}, t^{(n)}) ( x ( n ) , t ( n ) ) と表されるとき,データセットは
D = { ( x ( 1 ) , t ( 1 ) ) , ( x ( 2 ) , t ( 2 ) ) , … , ( x ( N ) , t ( N ) ) } = { ( x ( n ) , t ( n ) } n = 1 N
\begin{aligned}
\mathcal{D} &= \{(x^{(1)}, t^{(1)}), (x^{(2)}, t^{(2)}), \dots, (x^{(N)}, t^{(N)})\} \\
&= \{(x^{(n)}, t^{(n)}\}_{n=1}^N
\end{aligned}
D = {( x ( 1 ) , t ( 1 ) ) , ( x ( 2 ) , t ( 2 ) ) , … , ( x ( N ) , t ( N ) )} = {( x ( n ) , t ( n ) } n = 1 N
と表すことができます.
これを用いて、新しい
x x x を入力すると,それに対応する
t t t を予測するモデルを訓練します.
ここで,データセット中の入力値とのことを**データ点(datum)**ということがあることに注意してください.
データ点とは,具体的には上の説明で登場した
D \mathcal{D} D 中の各
( x ( 1 ) , t ( 1 ) ) (x^{(1)},t^{(1)}) ( x ( 1 ) , t ( 1 ) ) などのことです.
ここで,この後の計算を楽に進めるために,
データの中心化 というテクニックを紹介します.
部屋の広さと家賃は両方とも正の値であるため,各データ点をいくつかプロットすると,下図の左のグラフのようになります.
中心化では,各次元の
平均が 0 \boldsymbol{0} 0 となるよう全てのデータを同量平行移動します.
中心化はしばしば前処理として採用されます.
厳密には前章で紹介したスケーリング方法の一つである標準化(正規化)がよく用いられます.
この処理を行うと,下図のように,バイアス
b b b を
0 0 0 とおけるため,
f c ( x ; w ) = w x c f_c(x; w) = wx_{c} f c ( x ; w ) = w x c のように,モデルをバイアス成分なしで表現することができるようになります.
これによって,調整すべきパラメータを減らすことができます.
データの中心化は入出力の平均をデータの全体から引くことで実現されます.
つまり,
x c ( n ) = x ( n ) − x ˉ t c ( n ) = t ( n ) − t ˉ
\begin{aligned}
x^{(n)}_{c} &= x^{(n)} - \bar{x} \\
t^{(n)}_{c} &= t^{(n)} - \bar{t}
\end{aligned}
x c ( n ) t c ( n ) = x ( n ) − x ˉ = t ( n ) − t ˉ
例えば,具体的な数値で見ると,下の表のようになります.
n x ( n ) x^{(n)} x ( n ) x ˉ \bar{x} x ˉ x c ( n ) x^{(n)}_c x c ( n ) 1 1 3 -2 2 3 3 0 3 5 3 2
中心化後を示す添え字の
c c c に関しては表現が冗長となるため,今後はこの添え字を省略し,データの中心化を事前に行っていることを前提とします.
この時,モデルは
f ( x ; w ) = w x
f(x; w) = wx
f ( x ; w ) = w x
となり,単回帰分析の目標は,データセット
D = { x ( n ) , t ( n ) } n = 1 N \mathcal{D} = \{ x^{(n)}, t^{(n)} \}_{n=1}^{N} D = { x ( n ) , t ( n ) } n = 1 N に基づいて,パラメータ
w w w を
適切 に調整することになります.
Step2. 目的関数を決める(単回帰分析)
1章で説明したように,教師あり学習では多くの場合,目的関数を設計し,その目的関数を最小化(または最大化)することでモデルの訓練を行います.
今回は教師データと予測値が一致することが目標であり,乖離度を表す最小化すべき目的関数として教師データと予測値の二乗誤差を使います.
ここで,モデルの出力が予測値となります.すなわち,
y = f ( x ; w ) y = f(x; w) y = f ( x ; w ) です.
二乗誤差が
0 0 0 であれば
t = y t = y t = y となり予測が完全に教師データと一致していることを意味します.
n n n 番目の物件に対する教師データ
t ( n ) t^{(n)} t ( n ) と予測値
y ( n ) = f ( x ( n ) ; w ) y^{(n)} = f(x^{(n)}; w) y ( n ) = f ( x ( n ) ; w ) の二乗誤差は
( t ( n ) − y ( n ) ) 2
(t^{(n)} - y^{(n)})^2
( t ( n ) − y ( n ) ) 2
です.
特定の物件についてだけ考慮するのではなく,データセット中の全ての物件の情報を考慮してモデルの訓練を行うために,上式で計算される各データ点における二乗誤差を全物件に対してそれぞれ計算して和をとったものを目的関数とします.
すなわち,
L = ( t ( 1 ) − y ( 1 ) ) 2 + ( t ( 2 ) − y ( 2 ) ) 2 + ⋯ + ( t ( N ) − y ( N ) ) 2 = ∑ n = 1 N ( t ( n ) − y ( n ) ) 2
\begin{aligned}
\mathcal{L} &=
\left( t^{(1)} - y^{(1)} \right)^2 +
\left( t^{(2)} - y^{(2)} \right)^2 +
\dots +
\left( t^{(N)} - y^{(N)} \right)^2 \\
&=
\sum^{N}_{n=1} \left( t^{(n)} - y^{(n)} \right)^2 \\
\end{aligned}
L = ( t ( 1 ) − y ( 1 ) ) 2 + ( t ( 2 ) − y ( 2 ) ) 2 + ⋯ + ( t ( N ) − y ( N ) ) 2 = n = 1 ∑ N ( t ( n ) − y ( n ) ) 2
です.
また,Step1で決めたモデル
y ( n ) = f ( x ( n ) ; w ) = w x ( n )
y^{(n)} = f(x^{(n)}; w) = wx^{(n)}
y ( n ) = f ( x ( n ) ; w ) = w x ( n )
をこれに代入すると,目的関数は
L = ∑ n = 1 N ( t ( n ) − w x ( n ) ) 2
\mathcal{L} = \sum^{N}_{n=1}\left( t^{(n)} - wx^{(n)} \right)^2
L = n = 1 ∑ N ( t ( n ) − w x ( n ) ) 2
とパラメータを含んだ形式で表現することができます.このような関数を損失関数とよぶことを思い出してください.
Step3. 最適なパラメータを求める(単回帰分析)
次に目的関数を最小にするようなパラメータを求めます.
今回用いた目的関数は二次関数であるため,微分して求まる導関数を 0 とおいてそのときの x を求めれば,最小値を取る時の x が分かります.
すなわち,目的関数の「傾きが0」となる点が値
0 0 0 をとる点です.
それでは,目的関数を微分しましょう.
∂ ∂ w L = ∂ ∂ w ∑ n = 1 N ( t ( n ) − w x ( n ) ) 2
\begin{aligned}
\dfrac{\partial }{\partial w} \mathcal{L} &=
\dfrac{\partial}{\partial w} { \sum^{N}_{n=1} ( t^{(n)}-wx^{(n)})^{2} }
\end{aligned}
∂ w ∂ L = ∂ w ∂ n = 1 ∑ N ( t ( n ) − w x ( n ) ) 2
微分という操作は線形性 を持っているため,和の微分は,微分の和と等しくなります.
これを利用して次を得ます.
∂ ∂ w L = ∑ n = 1 N ∂ ∂ w ( t ( n ) − w x ( n ) ) 2
\dfrac{\partial}{\partial w} \mathcal{L} =
\sum^{N}_{n=1} \dfrac {\partial }{\partial w} \left( t^{(n)}-wx^{(n)} \right)^2
∂ w ∂ L = n = 1 ∑ N ∂ w ∂ ( t ( n ) − w x ( n ) ) 2
パラメータ
w w w による微分を表す
∂ ∂ w \dfrac {\partial }{\partial w} ∂ w ∂ と総和を表す
∑ \sum ∑ が入れ替わっています.
次に和の各項を見ます.
∂ ∂ w ( t ( n ) − w x ( n ) ) 2
\dfrac {\partial }{\partial w}\left( t^{(n)}-wx^{(n)} \right)^2
∂ w ∂ ( t ( n ) − w x ( n ) ) 2
t ( n ) − w x ( n ) t^{(n)} - wx^{(n)} t ( n ) − w x ( n ) と
( ⋅ ) 2 (\cdot)^2 ( ⋅ ) 2 の
合成関数 になっています.
u ( n ) = t ( n ) − w x ( n ) u^{(n)} = t^{(n)} - wx^{(n)} u ( n ) = t ( n ) − w x ( n ) ,
g ( u ( n ) ; w ) = ( u ( n ) ) 2 g(u^{(n)}; w) = (u^{(n)})^2 g ( u ( n ) ; w ) = ( u ( n ) ) 2 とおくと,
∂ ∂ w ( t ( n ) − w x ( n ) ) 2 = ∂ ∂ w g ( u ( n ) ) = ∂ u ( n ) ∂ w ∂ g ( u ( n ) ) ∂ u ( n ) = − x ( n ) ⋅ ( 2 u ( n ) ) = − 2 x ( n ) ( t ( n ) − w x ( n ) )
\begin{aligned}
\dfrac {\partial }{\partial w}
\left(
t^{(n)} - wx^{(n)}
\right)^2
&= \dfrac {\partial }{\partial w} g(u^{(n)}) \\
&= \dfrac {\partial u^{(n)}}{\partial w}
\dfrac{\partial g(u^{(n)})}{\partial u^{(n)}} \\
&= -x^{(n)} \cdot (2 u^{(n)}) \\
&= -2x^{(n)}( t^{(n)} - wx^{(n)} )
\end{aligned}
∂ w ∂ ( t ( n ) − w x ( n ) ) 2 = ∂ w ∂ g ( u ( n ) ) = ∂ w ∂ u ( n ) ∂ u ( n ) ∂ g ( u ( n ) ) = − x ( n ) ⋅ ( 2 u ( n ) ) = − 2 x ( n ) ( t ( n ) − w x ( n ) )
が得られます.これより,
∂ ∂ w L = ∑ n = 1 N ∂ ∂ w ( t ( n ) − w x ( n ) ) 2 = − ∑ n = 1 N 2 x ( n ) ( t ( n ) − w x ( n ) )
\begin{aligned}
\dfrac{\partial }{\partial w} \mathcal{L}
&= \sum^{N}_{n=1}
\dfrac {\partial }{\partial w}
\left( t^{(n)} - wx^{(n)} \right)^2 \\
&= -\sum^{N}_{n=1} 2x^{(n)} \left( t^{(n)} - wx^{(n)} \right)
\end{aligned}
∂ w ∂ L = n = 1 ∑ N ∂ w ∂ ( t ( n ) − w x ( n ) ) 2 = − n = 1 ∑ N 2 x ( n ) ( t ( n ) − w x ( n ) )
となります.この微分の値を 0 とおいて
w w w について解くと,
∂ ∂ w L = 0 − 2 ∑ n = 1 N x ( n ) ( t ( n ) − w x ( n ) ) = 0 − 2 ∑ n = 1 N x ( n ) t ( n ) + 2 ∑ n = 1 N w ( x ( n ) ) 2 = 0 − 2 ∑ n = 1 N x ( n ) t ( n ) + 2 w ∑ n = 1 N ( x ( n ) ) 2 = 0 w ∑ n = 1 N ( x ( n ) ) 2 = ∑ n = 1 N x ( n ) t ( n )
\begin{aligned}
\dfrac {\partial }{\partial w} \mathcal{L} &= 0 \\
-2 \sum^{N}_{n=1} x^{(n)} \left( t^{(n)} - wx^{(n)} \right) &= 0 \\
-2 \sum^{N}_{n=1} x^{(n)} t^{(n)} + 2 \sum^{N}_{n=1} w(x^{(n)})^2 &= 0 \\
-2 \sum^{N}_{n=1} x^{(n)} t^{(n)} + 2w \sum^{N}_{n=1} (x^{(n)})^2 &= 0 \\
w \sum^{N}_{n=1} (x^{(n)})^2 &= \sum^{N}_{n=1} x^{(n)} t^{(n)}
\end{aligned}
∂ w ∂ L − 2 n = 1 ∑ N x ( n ) ( t ( n ) − w x ( n ) ) − 2 n = 1 ∑ N x ( n ) t ( n ) + 2 n = 1 ∑ N w ( x ( n ) ) 2 − 2 n = 1 ∑ N x ( n ) t ( n ) + 2 w n = 1 ∑ N ( x ( n ) ) 2 w n = 1 ∑ N ( x ( n ) ) 2 = 0 = 0 = 0 = 0 = n = 1 ∑ N x ( n ) t ( n )
より,
w = ∑ n = 1 N x ( n ) t ( n ) ∑ n = 1 N ( x ( n ) ) 2
\begin{aligned}
w &= \dfrac
{\displaystyle \sum^{N}_{n=1} x^{(n)} t^{(n)}}
{\displaystyle \sum^{N}_{n=1} (x^{(n)})^2}
\end{aligned}
w = n = 1 ∑ N ( x ( n ) ) 2 n = 1 ∑ N x ( n ) t ( n )
と求まります.
この右辺に着目すると,与えられたデータセット
D = { x ( n ) , t ( n ) } n = 1 N \mathcal{D} = \{x^{(n)}, t^{(n)}\}_{n=1}^{N} D = { x ( n ) , t ( n ) } n = 1 N のみから決定されていることがわかります.
それでは,以下の数値例を使って実際にパラメータ
w w w を求めてみましょう.
n x ( n ) x^{(n)} x ( n ) t ( n ) t^{(n)} t ( n ) 1 1 2 2 2 3.9 3 3 6.1
まずは,データの中心化を行うために,平均を求めます.
x ˉ = 1 3 ( 1 + 2 + 3 ) = 2 t ˉ = 1 3 ( 2 + 3.9 + 6.1 ) = 4
\begin{aligned}
\bar{x} &= \dfrac{1}{3} (1 + 2 + 3) = 2 \\
\bar{t} &= \dfrac{1}{3}(2 + 3.9 + 6.1) = 4
\end{aligned}
x ˉ t ˉ = 3 1 ( 1 + 2 + 3 ) = 2 = 3 1 ( 2 + 3.9 + 6.1 ) = 4
各データ点からそれぞれの値を引きます.
x 1 = 1 − 2 = − 1 x 2 = 2 − 2 = 0 x 3 = 3 − 2 = 1 t 1 = 2 − 4 = − 2 t 2 = 3.9 − 4 = − 0.1 t 3 = 6.1 − 4 = 2.1
\begin{aligned}
x_{1} &= 1 - 2 = -1 \\
x_{2} &= 2 -2 = 0 \\
x_{3} &= 3- 2 = 1\\
t_{1} &= 2 - 4 = -2\\
t_{2} &= 3.9 - 4 = -0.1\\
t_{3} &= 6.1 - 4 = 2.1
\end{aligned}
x 1 x 2 x 3 t 1 t 2 t 3 = 1 − 2 = − 1 = 2 − 2 = 0 = 3 − 2 = 1 = 2 − 4 = − 2 = 3.9 − 4 = − 0.1 = 6.1 − 4 = 2.1
それでは,中心化後の値を用いて,最適なパラメータ
w w w を計算します.
w = ∑ n = 1 N x ( n ) t ( n ) ∑ n = 1 N ( x ( n ) ) 2 = x ( 1 ) t ( 1 ) + x ( 2 ) t ( 2 ) + x ( 3 ) t ( 3 ) ( x ( 1 ) ) 2 + ( x ( 2 ) ) 2 + ( x ( 3 ) ) 2 = − 1 × ( − 2 ) + 0 × 0.1 + 1 × 2.1 ( − 1 ) 2 + 0 2 + 1 2 = 2.05
\begin{aligned}
w &= \dfrac
{\displaystyle \sum_{n=1}^{N} x^{(n)} t^{(n)}}
{\displaystyle \sum_{n=1}^{N} (x^{(n)})^2} \\
&= \dfrac
{ x^{(1)} t^{(1)} + x^{(2)} t^{(2)} + x^{(3)} t^{(3)} }
{ (x^{(1)})^2 + (x^{(2)})^2 + (x^{(3)})^2 } \\
&= \dfrac
{ -1 \times (-2) + 0 \times 0.1 + 1 \times 2.1 }{ (-1)^2 + 0^2 + 1^2 } \\
&= 2.05
\end{aligned}
w = n = 1 ∑ N ( x ( n ) ) 2 n = 1 ∑ N x ( n ) t ( n ) = ( x ( 1 ) ) 2 + ( x ( 2 ) ) 2 + ( x ( 3 ) ) 2 x ( 1 ) t ( 1 ) + x ( 2 ) t ( 2 ) + x ( 3 ) t ( 3 ) = ( − 1 ) 2 + 0 2 + 1 2 − 1 × ( − 2 ) + 0 × 0.1 + 1 × 2.1 = 2.05
これで単回帰分析の学習が完了しました.
この求まったパラメータを
w ^ \hat{w} w ^ とすると,これを使用したモデル
f ( x ; w ^ ) f(x; \hat{w}) f ( x ; w ^ ) が
学習済みモデル となります.
続いて,このモデルを使って新しいサンプルに対する予測をしてみましょう.
学習したモデルを使って新たな入力データについて予測値を計算する処理を**推論 (inference)**とよびます.
例えば,新しいサンプル
x ( q ) = 1.5 x^{(q)}=1.5 x ( q ) = 1.5 に対する予測値は次のように求まります,
y ( q ) − t ˉ = w ^ ( x ( q ) − x ˉ ) ⇒ y ( q ) = w ^ ( x ( q ) − x ˉ ) + t ˉ = 2.05 × ( 1.5 − 2 ) + 4 = 2.975
\begin{aligned}
y^{(q)} - \bar{t} &= \hat{w}(x^{(q)}-\bar{x}) \\
\Rightarrow y^{(q)} &= \hat{w}(x^{(q)}-\bar{x}) + \bar{t} \\
&= 2.05 \times (1.5 - 2) + 4 \\
&= 2.975
\end{aligned}
y ( q ) − t ˉ ⇒ y ( q ) = w ^ ( x ( q ) − x ˉ ) = w ^ ( x ( q ) − x ˉ ) + t ˉ = 2.05 × ( 1.5 − 2 ) + 4 = 2.975
モデルは中心化データを用いて学習を行ったので,推論の際にも入力値・予測値それぞれに同様の操作を行う必要があることに注意しましょう.
以上が,単回帰分析の一連の手順となります.
重回帰分析
次に,多変数の入力変数を扱う重回帰分析を扱います.
この重回帰分析を学ぶことで線形代数に関する知識が深まります.
重回帰分析は単回帰分析と同様に教師あり学習の一種であり,回帰を行う手法です.
問題設定はほとんど単回帰分析と同じですが,重回帰分析では入力変数の数が複数となります.
つまり,複数の入力変数から出力変数を予測する機械学習手法の一つです.
問題設定(重回帰分析)
ここでは単回帰分析の場合と同様に家賃を予測する問題を考え,家賃を出力変数
y y y とします.
入力変数としては,単回帰分析では考慮しきれていなかった駅からの距離や犯罪発生率なども同時に考慮します.
例えば,部屋の広さ
x 1 x_{1} x 1 , 駅からの距離
x 2 x_{2} x 2 , ..., 犯罪発生率
x M x_{M} x M のように
M M M 個の入力変数があるとします(
M = 1 M=1 M = 1 の場合,単回帰分析の問題に帰着されます).
単回帰分析と同様,以下の3ステップに従います.
Step1: モデルを決める
Step2: 目的関数を決める
Step3: 最適なパラメータを求める
Step1. モデルを決める(重回帰分析)
単回帰分析のモデルは,
f ( x ; w , b ) = w x + b
f(x; w, b) = wx + b
f ( x ; w , b ) = w x + b
であり,
w w w を重み(weight),
b b b をバイアス (bias) とよびました.
重回帰分析では,この式を複数の入力変数へと拡張し,
f ( x ; w , b ) = w 1 x 1 + w 2 x 2 + ⋯ + w M x M + b
f({\bf x}; {\bf w}, b) = w_{1}x_{1} + w_{2}x_{2} + \dots + w_{M}x_{M} + b
f ( x ; w , b ) = w 1 x 1 + w 2 x 2 + ⋯ + w M x M + b
のような
線形結合 の形で表します.
ここで,太字の
x , w {\bf x}, {\bf w} x , w はそれぞれベクトルを表し,それぞれの
m m m 番目の要素が
w m , x m w_m, x_m w m , x m で表されています.
ここでは,各入力変数は出力変数に線形に影響を与えることが仮定されています.
一方,もし入力変数間に非線形な依存関係が想定される場合には,そのことを考慮したモデル化を行う必要があります.
それについては後述します.
重回帰分析のモデルは総和の記号を使って整理すると,
f ( x ; w , b ) = ∑ m = 1 M w m x m + b
f({\bf x}; {\bf w}, b) = \sum_{m=1}^{M} w_{m} x_{m} + b
f ( x ; w , b ) = m = 1 ∑ M w m x m + b
のように書くことができます.さらにここで,
x 0 = 1 x_0 = 1 x 0 = 1 ,
w 0 = b w_0 = b w 0 = b とおくと,
f ( x ; w , b ) = w 1 x 1 + w 2 x 2 + ⋯ + w M x M + b = w 1 x 1 + w 2 x 2 + ⋯ + w M x M + w 0 x 0 = w 0 x 0 + w 1 x 1 + ⋯ + w M x M = ∑ m = 0 M w m x m
\begin{aligned}
f({\bf x}; {\bf w}, b)
&= w_{1}x_{1} + w_{2}x_{2} + \dots + w_{M}x_{M} + b\\
&= w_{1}x_{1} + w_{2}x_{2} + \dots + w_{M}x_{M} + w_{0}x_{0}\\
&= w_{0}x_{0} + w_{1}x_{1} + \dots + w_{M}x_{M} \\
&= \sum_{m=0}^M w_m x_m
\end{aligned}
f ( x ; w , b ) = w 1 x 1 + w 2 x 2 + ⋯ + w M x M + b = w 1 x 1 + w 2 x 2 + ⋯ + w M x M + w 0 x 0 = w 0 x 0 + w 1 x 1 + ⋯ + w M x M = m = 0 ∑ M w m x m
のようにバイアス
b b b を総和記号の中に含めることができます.
w 0 w_0 w 0 を含む
w {\bf w} w を改めて
w {\bf w} w ,最初の要素
x 0 x_0 x 0 として
1 1 1 を付け加えた入力ベクトルを改めて
x {\bf x} x と定義しなおすと,このモデルはベクトルを用いて
f ( x ; w ) = [ w 0 w 1 … w M ] [ x 0 x 1 ⋮ x M ] = w T x = x T w
\begin{aligned}
f({\bf x}; {\bf w})
&= \begin{bmatrix}
w_{0} & w_{1} & \dots & w_{M}
\end{bmatrix}
\begin{bmatrix}
x_{0} \\
x_{1} \\
\vdots \\
x_{M}
\end{bmatrix} \\
&= {\bf w}^{T} {\bf x} = {\bf x}^T {\bf w}
\end{aligned}
f ( x ; w ) = [ w 0 w 1 … w M ] x 0 x 1 ⋮ x M = w T x = x T w
と書けます.
これで,ベクトルの内積を用いて表現することができました.
これで重回帰分析を行うためのモデルが決定できました.
このモデルはパラメータとして
M + 1 M+1 M + 1 個の重み
w {\bf w} w を持っています.
Step2. 目的関数を決める(重回帰分析)
単回帰分析では,目標値
t t t と予測値
y y y の二乗誤差が小さいほど良い予測であるとし,その総和を目的関数にしました.
重回帰分析でも,そのような予測値
y y y を求めるというのは同じであるため,同じ目的関数を使います.
ここで,
n n n 個目の入力値
x ( n ) {\bf x}^{(n)} x ( n ) に対する予測値
f ( x ( n ) ; w ) f({\bf x}^{(n)}; {\bf w}) f ( x ( n ) ; w ) を
y ( n ) y^{(n)} y ( n ) ,目標値を
t ( n ) t^{(n)} t ( n ) とおくと,目的関数は
L = ( t ( 1 ) − y ( 1 ) ) 2 + ( t ( 2 ) − y ( 2 ) ) 2 + ⋯ + ( t ( N ) − y ( N ) ) 2
\begin{aligned}
\mathcal{L}
&= \left( t^{(1)} - y^{(1)} \right)^2
+ \left( t^{(2)} - y^{(2)} \right)^2
+ \dots
+ \left( t^{(N)} - y^{(N)} \right)^2
\end{aligned}
L = ( t ( 1 ) − y ( 1 ) ) 2 + ( t ( 2 ) − y ( 2 ) ) 2 + ⋯ + ( t ( N ) − y ( N ) ) 2
となります.
単回帰分析では,これを総和記号
∑ \sum ∑ を用いて表すことができましたが,これは以下のようにベクトル同士の内積を用いて表すこともできます.
L = ( t ( 1 ) − y ( 1 ) ) 2 + ( t ( 2 ) − y ( 2 ) ) 2 + ⋯ + ( t ( N ) − y ( N ) ) 2 = [ t ( 1 ) − y ( 1 ) t ( 2 ) − y ( 2 ) … t ( N ) − y ( N ) ] [ t ( 1 ) − y ( 1 ) t ( 2 ) − y ( 2 ) ⋮ t ( N ) − y ( N ) ] = ( t − y ) T ( t − y )
\begin{aligned}
\mathcal{L}
&= \left( t^{(1)} - y^{(1)} \right)^2
+ \left( t^{(2)} - y^{(2)} \right)^2
+ \dots
+ \left( t^{(N)} - y^{(N)} \right)^2 \\
&= \begin{bmatrix}
t^{(1)} - y^{(1)} & t^{(2)} - y^{(2)} & \dots & t^{(N)} - y^{(N)}
\end{bmatrix}
\begin{bmatrix}
t^{(1)} - y^{(1)} \\
t^{(2)} - y^{(2)} \\
\vdots \\
t^{(N)} - y^{(N)}
\end{bmatrix} \\
&= \left( {\bf t} - {\bf y} \right)^{\rm T}
\left( {\bf t} - {\bf y} \right)
\end{aligned}
L = ( t ( 1 ) − y ( 1 ) ) 2 + ( t ( 2 ) − y ( 2 ) ) 2 + ⋯ + ( t ( N ) − y ( N ) ) 2 = [ t ( 1 ) − y ( 1 ) t ( 2 ) − y ( 2 ) … t ( N ) − y ( N ) ] t ( 1 ) − y ( 1 ) t ( 2 ) − y ( 2 ) ⋮ t ( N ) − y ( N ) = ( t − y ) T ( t − y )
y = [ y ( 1 ) y ( 2 ) ⋮ y ( N ) ] = [ ( x ( 1 ) ) T w ( x ( 2 ) ) T w ⋮ ( x ( N ) ) T w ] = [ ( x ( 1 ) ) T ( x ( 2 ) ) T ⋮ ( x ( N ) ) T ] w
\begin{aligned}
{\bf y}
=
\begin{bmatrix}
y^{(1)} \\
y^{(2)} \\
\vdots \\
y^{(N)}
\end{bmatrix}
=
\begin{bmatrix}
({\bf x}^{(1)})^{\rm T} {\bf w} \\
({\bf x}^{(2)})^{\rm T} {\bf w} \\
\vdots \\
({\bf x}^{(N)})^{\rm T} {\bf w}
\end{bmatrix}
=
\begin{bmatrix}
({\bf x}^{(1)})^{\rm T} \\
({\bf x}^{(2)})^{\rm T} \\
\vdots \\
({\bf x}^{(N)})^{\rm T}
\end{bmatrix}
\boldsymbol{w}
\end{aligned}
y = y ( 1 ) y ( 2 ) ⋮ y ( N ) = ( x ( 1 ) ) T w ( x ( 2 ) ) T w ⋮ ( x ( N ) ) T w = ( x ( 1 ) ) T ( x ( 2 ) ) T ⋮ ( x ( N ) ) T w
のように書くことができます.
ここで,
x ( n ) {\bf x}^{(n)} x ( n ) の
m m m 番目の要素を
x n m x_{nm} x nm と書くことにすると,上式はさらに
y = [ x 10 x 11 x 12 … x 1 M x 20 x 21 x 22 … x 2 M ⋮ ⋮ ⋮ ⋱ x N 0 x N 1 x N 2 … x N M ] [ w 0 w 1 w 2 ⋮ w M ] = X w
\begin{aligned}
{\bf y}
&=
\begin{bmatrix}
x_{10} & x_{11} & x_{12} & \dots & x_{1M} \\
x_{20} & x_{21} & x_{22} & \dots & x_{2M} \\
\vdots & \vdots & \vdots & \ddots \\
x_{N0} & x_{N1} & x_{N{2}} & \dots & x_{NM}
\end{bmatrix}
\begin{bmatrix}
w_{0} \\
w_{1} \\
w_{2} \\
\vdots \\
w_{M}
\end{bmatrix} \\
&=
{\bf X}{\bf w}
\end{aligned}
y = x 10 x 20 ⋮ x N 0 x 11 x 21 ⋮ x N 1 x 12 x 22 ⋮ x N 2 … … ⋱ … x 1 M x 2 M x NM w 0 w 1 w 2 ⋮ w M = X w
と表せます.
X {\bf X} X の各行が各サンプルを表しており,各列が入力変数を表しています.
つまり,各サンプルごとに
M M M 個の入力変数(
x n 0 x_{n0} x n 0 は常に
1 1 1 )を持ちます.
具体例を挙げてみます.
例えば,
m = 1 m=1 m = 1 が部屋の広さ,
m = 2 m=2 m = 2 が駅からの距離,
m = 3 m=3 m = 3 が犯罪発生率に対応する入力変数だとして,
n n n 個目のデータ点が部屋の広さ
= 50 m 2 = 50m^{2} = 50 m 2 ,駅からの距離
= 600 m = 600 m = 600 m ,犯罪発生率
= 2 = 2 = 2 % であるような物件を表している場合,これは
x n T = [ 1 50 600 0.02 ]
{\bf x}_{n}^{T} =
\begin{bmatrix}
1 & 50 & 600 & 0.02
\end{bmatrix}
x n T = [ 1 50 600 0.02 ]
というベクトルになります.
今,3 つの入力変数を考えているので,
M = 3 M=3 M = 3 ですが,入力ベクトル
x n {\bf x}_n x n の1つ目の要素
x n 1 x_{n1} x n 1 はバイアス
w 0 w_0 w 0 に対応する要素で常に値は
1 1 1 となることに注意してください.
Step3. パラメータを最適化する(重回帰分析)
それでは,目的関数を最小化するパラメータ
w {\bf w} w を求めてみましょう.
※ここでは,式変形を駆使しながら最適パラメータの解析的な解を求めていきますが,導出過程が少々複雑になります.導出結果は次節(§2.3)で示されているので,導出に興味のある方以外は本節はスキップしていただいて構いません.
まずは目的関数をパラメータ
w {\bf w} w を用いて表し直すと
L = ( t − y ) T ( t − y ) = ( t − X w ) T ( t − X w ) = { t T − ( X w ) T } ( t − X w ) = ( t T − w T X T ) ( t − X w )
\begin{aligned}
\mathcal{L}
&=
\left( {\bf t} - {\bf y} \right)^{\rm T}
\left( {\bf t} - {\bf y} \right) \\
&=
\left( {\bf t} - {\bf X}{\bf w} \right)^{\rm T}
\left( {\bf t} - {\bf X}{\bf w} \right) \\
&=
\left\{ {\bf t}^{\rm T} - ({\bf X}{\bf w})^{\rm T} \right\}
\left( {\bf t} - {\bf X}{\bf w} \right) \\
&=
\left( {\bf t}^{\rm T} - {\bf w}^{\rm T}{\bf X}^{\rm T} \right)
\left( {\bf t} - {\bf X}{\bf w} \right)
\end{aligned}
L = ( t − y ) T ( t − y ) = ( t − X w ) T ( t − X w ) = { t T − ( X w ) T } ( t − X w ) = ( t T − w T X T ) ( t − X w )
となります.
ここで,転置の公式
( A B ) T = B T A T ({\bf A}{\bf B})^{\rm T} = {\bf B}^{\rm T}{\bf A}^{\rm T} ( A B ) T = B T A T を使っていることに注意しましょう.
さらに分配法則を使って展開すると,
L = t T t − t T X w − w T X T t + w T X T X w
\begin{aligned}
\mathcal{L}
&=
{\bf t}^{\rm T}{\bf t}
- {\bf t}^{\rm T}{\bf X}{\bf w}
- {\bf w}^{\rm T}{\bf X}^{\rm T}{\bf t}
+ {\bf w}^{\rm T}{\bf X}^{\rm T}{\bf X}{\bf w} \\
\end{aligned}
L = t T t − t T X w − w T X T t + w T X T X w
となります.
この目的関数に対しパラメータの
w w w についての偏微分を計算します.
その前にこの式はもう少し整理することができます.
はじめに,
のようにスカラは転置しても変化しません.
上式の中で出てくる
t T X w {\bf t}^{\rm T}{\bf X}{\bf w} t T X w はスカラなので,
( t T X w ) T = t T X w
({\bf t}^{\rm T}{\bf X}{\bf w})^{\rm T} =
{\bf t}^{\rm T}{\bf X}{\bf w}
( t T X w ) T = t T X w
が成り立ちます.
さらに,転置の公式
( A B C ) T = C T B T A T ({\bf A}{\bf B}{\bf C})^{\rm T} = {\bf C}^{\rm T}{\bf B}^{\rm T}{\bf A}^{\rm T} ( A B C ) T = C T B T A T より,
( t T X w ) T = w T X T t
({\bf t}^{\rm T}{\bf X}{\bf w})^{\rm T}
= {\bf w}^{\rm T}{\bf X}^{\rm T}{\bf t}
( t T X w ) T = w T X T t
も成り立ちます.これより,
( t T X w ) T = t T X w = w T X T t
({\bf t}^{\rm T}{\bf X}{\bf w})^{\rm T}
= {\bf t}^{\rm T}{\bf X}{\bf w}
= {\bf w}^{\rm T}{\bf X}^{\rm T}{\bf t}
( t T X w ) T = t T X w = w T X T t
を導くことができます.
目的関数を
L \mathcal{L} L とおくと,上の式を利用して,
L = t T t − 2 t T X w + w T X T X w
\begin{aligned}
\mathcal{L}
= {\bf t}^{\rm T}{\bf t}
- 2 {\bf t}^{\rm T}{\bf X}{\bf w}
+ {\bf w}^{\rm T}{\bf X}^{\rm T}{\bf X}{\bf w} \\
\end{aligned}
L = t T t − 2 t T X w + w T X T X w
とまとめることができます.ここで,
w {\bf w} w について偏微分を行いやすくするため,
w {\bf w} w 以外の定数項をまとめると,
L = t T t − 2 t T X w + w T X T X w = t T t − 2 ( X T t ) T w + w T X T X w = γ + β T w + w T A w
\begin{aligned}
\mathcal{L}
&= {\bf t}^{\rm T}{\bf t}
- 2 {\bf t}^{\rm T}{\bf X}{\bf w}
+ {\bf w}^{\rm T}{\bf X}^{\rm T}{\bf X}{\bf w} \\
&= {\bf t}^{\rm T}{\bf t}
- 2 \left( {\bf X}^{\rm T}{\bf t} \right)^{\rm T}{\bf w}
+ {\bf w}^{\rm T}{\bf X}^{\rm T}{\bf X}{\bf w} \\
&= \gamma + \boldsymbol{\beta}^{\rm T}{\bf w} + {\bf w}^{\rm T}{\bf A}{\bf w}
\end{aligned}
L = t T t − 2 t T X w + w T X T X w = t T t − 2 ( X T t ) T w + w T X T X w = γ + β T w + w T A w
となります.
線形代数の章で学んだような
w {\bf w} w に関する二次形式(二次関数)で表現することができました.
ここで,
A = X T X , β = − 2 X T t , γ = t T t {\bf A}= {\bf X}^{\rm T}{\bf X}, \ \boldsymbol{\beta} =-2 {\bf X}^{\rm T}{\bf t}, \ \gamma = {\bf t}^{\rm T}{\bf t} A = X T X , β = − 2 X T t , γ = t T t です.
また,
β \boldsymbol{\beta} β を転置の形式にした理由は,線形代数の章で学んだベクトルで微分するための公式集にある形式に合わせるためです.
それでは,この目的関数を最小化するパラメータ
w {\bf w} w の求め方を考えましょう.
前述の通り,目的関数はパラメータ
w {\bf w} w に関しては二次関数になっています.
例えば,
w = [ w 1 w 2 ] , A = [ 1 2 3 4 ] , β = [ 1 2 ] , γ = 1
\begin{aligned}
{\bf w} = \begin{bmatrix}
w_{1} \\ w_{2}
\end{bmatrix},
{\bf A} = \begin{bmatrix}
1 & 2 \\
3 & 4
\end{bmatrix},
\boldsymbol{\beta} = \begin{bmatrix}
1 \\
2
\end{bmatrix},
\gamma = 1
\end{aligned}
w = [ w 1 w 2 ] , A = [ 1 3 2 4 ] , β = [ 1 2 ] , γ = 1
のとき,
L = w T A w + β T w + γ = [ w 1 w 2 ] [ 1 2 3 4 ] [ w 1 w 2 ] + [ 1 2 ] [ w 1 w 2 ] + 1 = [ w 1 w 2 ] [ w 1 + 2 w 2 3 w 1 + 4 w 2 ] + w 1 + 2 w 2 + 1 = w 1 ( w 1 + 2 w 2 ) + w 2 ( 3 w 1 + 4 w 2 ) + w 1 + 2 w 2 + 1 = w 1 2 + 5 w 1 w 2 + 4 w 2 2 + w 1 + 2 w 2 + 1
\begin{aligned}
\mathcal{L} & =
{\bf w}^{\rm T}{\bf A}{\bf w}
+ \boldsymbol{\beta}^{\rm T}{\bf w}
+ \gamma \\
&=
\begin{bmatrix}
w_{1} & w_{2}
\end{bmatrix}
\begin{bmatrix}
1 & 2 \\
3 & 4
\end{bmatrix}
\begin{bmatrix}
w_{1} \\
w_{2}
\end{bmatrix}
+
\begin{bmatrix}
1 & 2
\end{bmatrix}
\begin{bmatrix}
w_{1} \\
w_{2}
\end{bmatrix}
+ 1 \\
&=
\begin{bmatrix}
w_{1} & w_{2}
\end{bmatrix}
\begin{bmatrix}
w_{1} + 2w_{2} \\
3w_{1} + 4w_{2}
\end{bmatrix}
+ w_{1}
+ 2 w_{2}
+ 1 \\
&= w_{1} \left( w_{1} + 2w_{2} \right)
+ w_{2} \left( 3w_{1} + 4w_{2} \right)
+ w_{1}
+ 2w_{2}
+ 1 \\
&= w^{2}_{1}
+ 5w_{1}w_{2}
+ 4w^{2}_{2}
+ w_{1}
+ 2w_{2}
+ 1 \\
\end{aligned}
L = w T A w + β T w + γ = [ w 1 w 2 ] [ 1 3 2 4 ] [ w 1 w 2 ] + [ 1 2 ] [ w 1 w 2 ] + 1 = [ w 1 w 2 ] [ w 1 + 2 w 2 3 w 1 + 4 w 2 ] + w 1 + 2 w 2 + 1 = w 1 ( w 1 + 2 w 2 ) + w 2 ( 3 w 1 + 4 w 2 ) + w 1 + 2 w 2 + 1 = w 1 2 + 5 w 1 w 2 + 4 w 2 2 + w 1 + 2 w 2 + 1
となります.
さらに
w 1 , w 2 w_{1}, w_{2} w 1 , w 2 に関してそれぞれまとめると,
L = w 1 2 + ( 5 w 2 + 1 ) w 1 + ( 4 w 2 2 + 2 w 2 + 1 ) = 4 w 2 2 + ( 5 w 1 + 2 ) w 2 + ( w 1 2 + w 1 + 1 )
\begin{aligned}
\mathcal{L}
&= w^{2}_{1}
+ \left( 5w_{2} + 1\right) w_{1}
+ \left( 4w^{2}_{2} + 2w_{2} + 1 \right) \\
&= 4w^{2}_{2}
+ \left( 5w_{1} + 2 \right) w_{2}
+ \left( w^{2}_{1} + w_{1} + 1 \right)
\end{aligned}
L = w 1 2 + ( 5 w 2 + 1 ) w 1 + ( 4 w 2 2 + 2 w 2 + 1 ) = 4 w 2 2 + ( 5 w 1 + 2 ) w 2 + ( w 1 2 + w 1 + 1 )
となり,それぞれの二次関数であることがわかります.
そして,二次関数であれば,下図のような形となります.
これを3次元でイメージすると,下図のようになります.
そして,目的関数である二乗誤差の総和が最小となる点では各変数で微分した時の傾きが0となります.
この例では,
w 1 w_{1} w 1 と
w 2 w_{2} w 2 の2つのパラメータの場合で考えましたが,これは
w 0 w_{0} w 0 ,
w 1 w_{1} w 1 ,
w 2 w_{2} w 2 ,
… \ldots … ,
w M w_{M} w M の場合でも同様に考えることができ,目的関数が最小となる点は
{ ∂ ∂ w 0 L = 0 ∂ ∂ w 1 L = 0 ⋮ ∂ ∂ w M L = 0
\begin{cases}
\dfrac {\partial }{\partial w_{0}}\mathcal{L} = 0\\
\dfrac {\partial }{\partial w_{1}}\mathcal{L} = 0\\
\ \ \ \ \ \vdots \\
\dfrac {\partial }{\partial w_{M}}\mathcal{L} = 0\\
\end{cases}
⎩ ⎨ ⎧ ∂ w 0 ∂ L = 0 ∂ w 1 ∂ L = 0 ⋮ ∂ w M ∂ L = 0
となり,これをまとめると,
[ ∂ ∂ w 0 L ∂ ∂ w 1 L ⋮ ∂ ∂ w M L ] = [ 0 0 ⋮ 0 ] ⇒ ∂ ∂ w L = 0
\begin{aligned}
\begin{bmatrix}
\dfrac {\partial}{\partial w_{0}} \mathcal{L} \\
\dfrac {\partial}{\partial w_{1}} \mathcal{L} \\
\vdots \\
\dfrac {\partial}{\partial w_{M}} \mathcal{L} \\
\end{bmatrix}&=\begin{bmatrix}
0 \\
0 \\
\vdots \\
0 \\
\end{bmatrix} \\
\Rightarrow \dfrac {\partial}{\partial {\bf w}} \mathcal{L} &= \boldsymbol{0} \\
\end{aligned}
∂ w 0 ∂ L ∂ w 1 ∂ L ⋮ ∂ w M ∂ L ⇒ ∂ w ∂ L = 0 0 ⋮ 0 = 0
のようにベクトルでの微分として表されます.
あとは,上式を満たす
w {\bf w} w を決めます.
まずは
w {\bf w} w が求めやすくなるように,代入と式変形を行います.
(下記の計算ではベクトルでの微分をはじめとして線形代数の章で学んだ内容を活用しているため,計算途中がわからなくなった場合には,線形代数の章を再度確認しながら進めてください.)
∂ ∂ w L = ∂ ∂ w ( γ + β T w + w T A w ) = 0 ∂ ∂ w ( γ ) + ∂ ∂ w ( β T w ) + ∂ ∂ w ( w T A w ) = 0 0 + β + ( A + A T ) w = 0 − 2 X T t + { X T X + ( X T X ) T } w = 0 − 2 X T t + 2 X T X w = 0 X T X w = X T t
\begin{aligned}
\dfrac {\partial }{\partial {\bf w}}
\mathcal{L} =
\dfrac {\partial }{\partial {\bf w}}
\left( \gamma + \boldsymbol{\beta}^{\rm T}{\bf w} + {\bf w}^{\rm T}{\bf A}{\bf w} \right)
= {\bf 0} \\
\dfrac {\partial }{\partial {\bf w}}
\left( \gamma \right)
+ \dfrac {\partial }{\partial {\bf w}} \left( \boldsymbol{\beta}^{\rm T}{\bf w} \right)
+ \dfrac {\partial }{\partial {\bf w}} \left( {\bf w}^{\rm T}{\bf A}{\bf w} \right)
= {\bf 0} \\
{\bf 0}
+ \boldsymbol{\beta}
+ \left( {\bf A}+{\bf A}^{\rm T} \right) {\bf w}
= {\bf 0} \\
-2{\bf X}^{\rm T}{\bf t}
+ \left\{ {\bf X}^{\rm T}{\bf X} + \left( {\bf X}^{\rm T}{\bf X} \right)^{\rm T} \right\} {\bf w}
= {\bf 0} \\
-2{\bf X}^{\rm T}{\bf t}+2{\bf X}^{\rm T}{\bf X}{\bf w}={\bf 0}\\
{\bf X}^{\rm T}{\bf X}{\bf w}={\bf X}^{\rm T}{\bf t}\\
\end{aligned}
∂ w ∂ L = ∂ w ∂ ( γ + β T w + w T A w ) = 0 ∂ w ∂ ( γ ) + ∂ w ∂ ( β T w ) + ∂ w ∂ ( w T A w ) = 0 0 + β + ( A + A T ) w = 0 − 2 X T t + { X T X + ( X T X ) T } w = 0 − 2 X T t + 2 X T X w = 0 X T X w = X T t
ここで,
X T X {\bf X}^{\rm T} {\bf X} X T X に逆行列が存在すると仮定して,両辺に左側から
( X T X ) − 1 \left( {\bf X}^{\rm T}{\bf X}\right)^{-1} ( X T X ) − 1 をかけると,
( X T X ) − 1 X T X w = ( X T X ) − 1 X T t I w = ( X T X ) − 1 X T t w = ( X T X ) − 1 X T t
\begin{aligned}
\left( {\bf X}^{\rm T}{\bf X}\right)^{-1}{\bf X}^{\rm T}{\bf X} {\bf w} =\left( {\bf X}^{\rm T}{\bf X}\right)^{-1}{\bf X}^{\rm T}{\bf t} \\
{\bf I}{\bf w}=\left( {\bf X}^{\rm T}{\bf X}\right)^{-1}{\bf X}^{\rm T}{\bf t} \\
{\bf w}=\left( {\bf X}^{\rm T}{\bf X}\right)^{-1}{\bf X}^{\rm T}{\bf t}
\end{aligned}
( X T X ) − 1 X T X w = ( X T X ) − 1 X T t I w = ( X T X ) − 1 X T t w = ( X T X ) − 1 X T t
となり,与えられたデータセット
X , t {\bf X}, {\bf t} X , t から,最適なパラメータ
w {\bf w} w が求まりました.ここで,
I {\bf I} I は単位行列です.また,式変形の際には,
w = X T t X T X
{\bf w} = \dfrac{{\bf X}^{\rm T}{\bf t}}{{\bf X}^{\rm T}{\bf X}}
w = X T X X T t
のような分数が表れないように注意してください.これは行列の計算には割り算が定義されていないためです.
そのため,逆行列を使って行列積のみで計算しています.
また,もうひとつよくある間違いとして,
w {\bf w} w を求めるために以下のような式変形をしてしまう例が挙げられます.
X T X w = X T t ( X T ) − 1 X T X w = ( X T ) − 1 X T t X w = t X − 1 X w = X − 1 t w = X − 1 t
\begin{aligned}
{\bf X}^{\rm T}{\bf X}{\bf w}
&= {\bf X}^{\rm T}{\bf t} \\
\left( {\bf X}^{\rm T} \right)^{-1} {\bf X}^{\rm T}{\bf X}{\bf w}
&= \left( {\bf X}^{\rm T} \right)^{-1}{\bf X}^{\rm T}{\bf t} \\
{\bf X}{\bf w}
&= {\bf t} \\
{\bf X}^{-1}{\bf X}{\bf w}
&= {\bf X}^{-1}{\bf t} \\
{\bf w}
&= {\bf X}^{-1}{\bf t}
\end{aligned}
X T X w ( X T ) − 1 X T X w X w X − 1 X w w = X T t = ( X T ) − 1 X T t = t = X − 1 t = X − 1 t
しかし,これは一般には成立しません.
その理由は,逆行列を持つための条件の一つである
正方行列であること を
X {\bf X} X が常に満たすとは限らないためです.
サンプル数
N N N と入力変数の数
M + 1 M+1 M + 1 が等しくない場合,
X ∈ R N × ( M + 1 ) {\bf X} \in \mathcal{R}^{N \times (M+1)} X ∈ R N × ( M + 1 ) は正方行列ではなく,逆行列をもちません.
一方,
X T X {\bf X}^{\rm T} {\bf X} X T X は
X T X ∈ R ( M + 1 ) × ( M + 1 ) {\bf X}^{\rm T}{\bf X} \in \mathcal{R}^{(M+1) \times (M+1)} X T X ∈ R ( M + 1 ) × ( M + 1 ) であり,サンプル数
N N N に依存することなく,常に正方行列となることに注目してください.(逆行列が求まるためにはもう少し厳密な条件がありますが,ここでは説明しません.)
推論の際は学習で得られたパラメータを
w ^ \hat{\bf w} w ^ として
y q = w ^ T x q
y_{q} = \hat{\bf w}^{\rm T}{\bf x}_{q}
y q = w ^ T x q
のように計算することで予測値が得られます.
で表されることが分かりました.この最適なパラメータを計算するために,以下の5つを扱います.
具体的に,以下のようなデータセットが与えられているケースを想定してみましょう.この例では,データのサンプル数
N N N は
4 4 4 であり,入力データ
X X X の変数の数は
2 2 2 です.そして
t t t は教師データとなります.
X = [ 1 2 3 1 2 5 1 3 4 1 5 9 ] , t = [ 1 5 6 8 ]
\boldsymbol{X} =
\begin{bmatrix}
1 & 2 & 3 \\
1 & 2 & 5 \\
1 & 3 & 4 \\
1 & 5 & 9
\end{bmatrix}, \
\boldsymbol{t} =
\begin{bmatrix}
1 \\ 5 \\ 6 \\ 8
\end{bmatrix}
X = 1 1 1 1 2 2 3 5 3 5 4 9 , t = 1 5 6 8
ここで
X \boldsymbol{X} X は
パラメータ w \boldsymbol{w} w がバイアス b \boldsymbol{b} b を包含する 形式を想定しており,従って入力データ
X \boldsymbol{X} X の1列目には
1 1 1 が格納されています.
それでは実装方法について見ていきましょう.まずは,NumPyの読み込みから始めます.
NumPyによる実装
それでは重回帰分析で行われる計算をPythonを用いてコンピュータに実行させてみましょう.
PythonにはNumPy とよばれる線形代数を簡単に扱えるライブラリが存在し,広く利用されています.
次の章で紹介するChainerの中でもNumPyは用いられており,様々なデータ解析・科学計算のライブラリで広く採用されているため,NumPyの使い方にある程度慣れ親しんでおくことは後々役立ちます.
以下では,Pythonの基本的な文法はすでに理解していることを前提としています.
例えば,変数(数値・文字列,リスト,タプル,辞書),制御構文(for,if),関数,クラスを理解している必要があります.
重回帰分析では,最終的に最適なパラメータ
w {\bf w} w が
w = ( X T X ) − 1 X T t
{\bf w} = \left( {\bf X}^{\rm T}{\bf X}\right)^{-1}{\bf X}^{\rm T}{\bf t}
w = ( X T X ) − 1 X T t
と閉じた形で求まりました.
この計算を行うために,これから以下の5つをNumPyを使って行います.
以下のようなデータセットが与えられているとします.
X = [ 1 2 3 1 2 5 1 3 4 1 5 9 ] , t = [ 1 5 6 8 ]
{\bf X} = \left[ \begin{matrix}
1 & 2 & 3 \\
1 & 2 & 5 \\
1 & 3 & 4 \\
1 & 5 & 9
\end{matrix} \right], \
{\bf t} = \left[ \begin{matrix}
1 \\ 5 \\ 6 \\ 8
\end{matrix} \right]
X = 1 1 1 1 2 2 3 5 3 5 4 9 , t = 1 5 6 8
データ数
N = 4 N = 4 N = 4 であり,入力変数の数
M = 2 M = 2 M = 2 です.
それではこのデータセットにフィットするモデル
f ( x ; w ) = x T w f({\bf x}; {\bf w}) = {\bf x}^{\rm T}{\bf w} f ( x ; w ) = x T w のパラメータ
w {\bf w} w をNumPyを使って計算してみましょう.
まずNumPyを読み込みます.