この記事では、線形回帰モデルのフィッティングでよく利用する最小二乗法(least squares method)について、正規方程式を用いて最小二乗法の解を導出します。
私の理解のため表現、理解等に誤りがあれば、コメント等でご指摘いただけますと嬉しいです。
線形回帰モデル
線形回帰モデル(liner regression)は、1つ以上の説明変数(x)と被説明変数(y)との関係性をモデル化しています。
線形回帰モデルの基底関数(basis function)の違いによって以下のように呼ぶことができます。
単回帰
単回帰は、説明変数が1変数のみであり、説明変数(1次元)から
xT=(1,x1)
と考え、
y^(x,w)=w0+w1x1
で、説明変数と被説明変数の関係性をモデル化します。
ここで、線形回帰モデルの基底関数をϕ0(x)=1,ϕ1(x)=x1として、特徴ベクトル(feature vector)をϕ(x)=(ϕ0(x),ϕ1(x))Tと おくと、
y^(x,w)=w0+w1x1=(w0,w1)(1x1)=wTϕ(x)
となり、ベクトルの内積で表現できます。なお、wはモデルの係数ベクトルです。
重回帰
重回帰は、説明変数が多変数となり、説明変数(D次元)から
xT=(1,x1,x2,…,xD)
と考え、
y^(x,w)=w0+w1x1+w2x2+⋯+wDxD
で、説明変数と被説明変数の関係性をモデル化します。
ここで、線形回帰モデルの基底関数をϕ0(x)=1,ϕ1(x)=x1,…,ϕD(x)=xDとして、特徴ベクトルをϕ(x)=(ϕ0(x),ϕ1(x),…,ϕD(x))Tとおくと、
y^(x,w)=w0+w1x1+w2x2+⋯+wDxD=(w0,w1,w2,…,wD)⎝⎜⎜⎜⎜⎜⎜⎛1x1x2⋮xD⎠⎟⎟⎟⎟⎟⎟⎞=wTϕ(x)
となり、単回帰と同様に内積で表現できます。異なっている部分は基底関数の定義のみです。
つまり、重回帰は単回帰を多変数に拡張しています。
多項式回帰
多項式回帰は、説明変数に対して非線形な関数ϕ(n次多項式や三角関数等)を基底関数として、
y^(x,w)=w0ϕ0(x)+w1ϕ1(x)+⋯+wHϕH(x)
で、説明変数と被説明変数の関係性をモデル化します。
例として、多項式
y^(x,w)=w0+w1x1++w2x12+w3sin(x1)
に回帰する場合を考えます。
この場合、基底関数はϕ0(x)=1,ϕ1(x)=x1,ϕ2(x)=x12,ϕ3(x)=sin(x1)、特徴ベクトルはϕ(x)=(ϕ0(x),ϕ1(x),ϕ2(x),ϕ3(x))Tとなるため、以下のように表現できます。
y^(x,w)=w0+w1x1++w2x12+w3sin(x1)=(w0,w1,w2,w3)⎝⎜⎜⎜⎛1x1x12sin(x1)⎠⎟⎟⎟⎞=wTϕ(x)
多項式回帰では、多項式がxに対して非線形になっていますが、wに対しては線形となっているため、線形回帰と呼ばれています。
上記から、基底関数を変更することで、単回帰、重回帰、線形回帰が同一のベクトル表現で表現できることが分かります。
最小二乗法
ここからが本題です。
線形回帰モデルのフィッティングでは、標準的に使われる手法として、最小二乗法があります。
最小二乗法は、実際の測定値yがN個ある場合に、測定値yと線形回帰モデルでの予測値y^の二乗誤差の総和
E=n=1∑N(yn−y^n)2=n=1∑N(yn−wTϕ(xn))2
を最小にするwを求めることで、線形回帰モデルをフィッティングさせます。
ここからは、このwを導出していきます。
事前準備
二乗誤差の総和(E)を最小にするには、Eをベクトルwで微分して0とすれば、Eを最小とするwが導出できます。
∂w∂E=∂w∂n=1∑N(yn−y^n)2=∂w∂n=1∑N(yn−wTϕ(xn))2=0
上記を解くために以下の公式等を準備します。
- 計画行列
- ベクトル要素の二乗和
- 内積の微分
- 二次形式の微分
計画行列
線形回帰モデルでは、単回帰、重回帰、多項式回帰のどれもy^(x,w)=wTϕ(x)で表現できました。
そこで、実際の測定値yがN個ある場合、yの予測値y^は、基底関数を用いて以下の行列で表現できます。
⎝⎜⎜⎜⎜⎛y^1y^2⋮y^N⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛wTϕ(x1)wTϕ(x2)⋮wTϕ(xN)⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛ϕ(x1)Tϕ(x2)T⋮ϕ(xN)T⎠⎟⎟⎟⎟⎞w=⎝⎜⎜⎜⎜⎛ϕ0(x1)ϕ0(x2)⋮ϕ0(xN)ϕ1(x1)ϕ1(x2)ϕ1(xN)⋯⋯⋯ϕH(x1)ϕH(x2)⋮ϕH(xN)⎠⎟⎟⎟⎟⎞w
なお、ϕ0(x)≡1 と定義しています。
ここで、
y^=⎝⎜⎜⎜⎜⎛y^1y^2⋮y^N⎠⎟⎟⎟⎟⎞,Φ=⎝⎜⎜⎜⎜⎛ϕ0(x1)ϕ0(x2)⋮ϕ0(xN)ϕ1(x1)ϕ1(x2)ϕ1(xN)⋯⋯⋯ϕH(x1)ϕH(x2)⋮ϕH(xN)⎠⎟⎟⎟⎟⎞
とおくと、y^=Φwと表現でき、行列Φを計画行列と呼びます。
この計画行列Φは、線形回帰モデルの基底関数を行列で表現しています。
ベクトル要素の二乗和
ベクトルx=(x1,x2,…,xn)Tの要素の二乗和は
x12+x22+⋯xn2=(x1,x2,…,xn)⎝⎜⎜⎜⎜⎛x1x2⋮xn⎠⎟⎟⎟⎟⎞=xTx
内積の微分
w=(w1,w2,…,wn)T,x=(x1,x2,…,xn)Tとすると、
wTx=w1x1+w2x2⋯+wnxn
スカラーである内積wTxをベクトルwで微分することを考えます。ベクトルの各要素で微分すれば良いので、
∂w∂wTx=⎝⎜⎜⎜⎜⎛∂w1∂wTx∂w2∂wTx⋮∂wn∂wTx⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛x1x2⋮xn⎠⎟⎟⎟⎟⎞=x
となります。
二次形式の微分
w=(w1,w2,…,wn)T,XをN次正方行列として、スカラーである二次形式wTXwをベクトルwで微分することを考えます。
まず、二次形式を変換します。
wTXw=wT⎝⎜⎜⎜⎛∑j=1NX1jwj⋮∑j=1NXNjwj⎠⎟⎟⎟⎞=w1j=1∑NX1jwj+w2j=1∑NX2jwj+⋯+wNj=1∑NXNjwj=i=1∑Nj=1∑NXijwiwj
ここで、wのk番目の成分wkで二次形式の微分を考えると、積の微分公式から
∂wk∂wTXw=∂wk∂(i=1∑Nj=1∑NXijwiwj)=i=1∑Nj=1∑NXij(∂wk∂wi)wj+i=1∑Nj=1∑NXijwi∂wk∂wj=j=1∑NXkjwj+i=1∑NXikwi
上記から二次形式のwkでの微分は、前半の項がXwのk番目の成分、後半の項がXTwのk番目の成分になっていることが分かります。
これをwに拡張すると、二次形式の微分は以下のようになります。
∂w∂wTXw=⎝⎜⎜⎜⎜⎜⎛∑j=1NX1jwj+∑i=1NXi1wi∑j=1NX2jwj+∑i=1NXi2wi⋮∑j=1NXNjwj+∑i=1NXiNwi⎠⎟⎟⎟⎟⎟⎞=Xw+XTw=(X+XT)w
二乗誤差の総和を最小にする値の導出
ここまでで準備が整いましたので、wを導出していきます。
まず、Eをwで微分がしやすいように、計画行列とベクトル要素の二乗和を使って展開します。
E=n=1∑N(yn−y^n)2=n=1∑N(yn−wTϕ(xn))2=(y−Φw)T(y−Φw)=yTy−yTΦw−(Φw)Ty+(Φw)TΦw
ここで、yTΦwはスカラーなので、yTΦw=(yTΦw)Tが成り立ち、
E=yTy−(yTΦw)T−(Φw)Ty+(Φw)TΦw=yTy−(Φw)Ty−(Φw)Ty+(wTΦT)Φw=yTy−2(Φw)Ty+wTΦTΦw=yTy−2(wTΦT)y+wTΦTΦw=yTy−2wT(ΦTy)+wTΦTΦw
次にEを最小とするwを導出するために、∂w∂E=0とおくと、内積と二次形式の微分から
∂w∂E=∂w∂(yTy−2wT(ΦTy)+wTΦTΦw)=−2ΦTy+(ΦTΦ+(ΦTΦ)T)w=−2ΦTy+(ΦTΦ+ΦTΦ)w=−2ΦTy+2ΦTΦw=0
となります。よって、方程式
ΦTΦw=ΦTy
が得られます。この導出された方程式を正規方程式(normal equation)といいます。
したがって、正規方程式からΦTΦの逆行列が存在するならば、
w=(ΦTΦ)−1ΦTy
が、二乗誤差の総和を最小にするwとなります。これでwの導出が完了です。
終わりに
今回は、正規方程式を用いて最小二乗法の解を導出しました。
ただ、これを手計算で行うことは現実的に大変なので、次はPythonで正規方程式を用いた最小二乗法を実装してみます。