最小二乗法の理論

9. 最小 2 乗法
田中雅博
最適化プログラミング、教科書 pp.105–113
1 次関数の当てはめ
1
1.1
変数が 1 つの場合
いま x とそれに関係する y のデータが N 組ある。すなわち、{(x1 , y1 ), . . . , (xN , yN )} とする。
これらが直線の上に乗っていれば、y = ax + b と書ける。しかし、一般にはばらつく。そこで、y
を x の 1 次式で近似するという意味で、誤差の 2 乗を最小にすることを考える。すなわち、
1∑
2
(yi − (axi + b)) → min
2 i=1
N
J=
(1)
これを、a 及び b を調整して最小化するということからは、
∂J
= 0,
∂a
∂J
=0
∂b
とすればよい。
(1) 式を直接そのまま a で微分して 0 とおくことにより、
N
∑
(yi − (axi + b)) (−xi ) = 0
i=1
これより
−
N
∑
yi xi +
i=1
N
∑
axi xi +
i=1
N
∑
bxi = 0
i=1
すなわち
a
N
∑
x2i + b
i=1
N
∑
xi =
i=1
N
∑
yi xi
(2)
i=1
を得る。同様に、(1) 式を直接そのまま a で微分して 0 とおくことにより、
N
∑
(yi − (axi + b)) = 0
i=1
よって
a
N
∑
xi + bN =
i=1
N
∑
i=1
1
yi
(3)
を得る。(2) 式と (3) 式を連立させることにより
) ( ∑
)
( ∑
)(
∑N
N
N
2
a
i=1 xi yi
i=1 xi
i=1 xi
=
∑N
∑N
b
N
i=1 yi
i=1 xi
(4)
となり、これ(正規方程式と呼ばれている)を解くことにより、a と b が求まる。
( ∑
)
∑N
N
2
i=1 xi
i=1 xi
∑N
N
i=1 xi
が逆行列をもつとき
(
a
b
)
( ∑
N
x2i
∑i=1
N
i=1 xi
=
∑N
i=1 xi
N
)−1 ( ∑
N
xi yi
∑i=1
N
i=1 yi
)
(5)
となる。
教科書はこの形を示しているが、行列とベクトルを使った表現の方が簡潔でわかりやすい。先に
述べたように、y は厳密に ax + b とは書けないので、各データ (xi , yi ) ごとに誤差 ei を持つものと
しよう。そうすると、
yi = axi + b + ei ,
i = 1, . . . , N
と書ける。データを縦に並べたベクトルや、それに関連する行列を




y1
x1 1
(
)




 y2 
 x2 1 
a




y =  . , M =  .
,
..  , θ =
b
 .. 
 ..
. 
yN
xN
1



e=


e1
e2
..
.






eN
とおくと、
y = Mθ + e
と書ける。誤差の 2 乗和は
N
∑
(6)
e2i = eT e
i=1
であるから、
J=
1 T
e e = (y − M θ)T (y − M θ)
2
となる。内積表現を用いると
J=
1
1
(e, e) = ((y − M θ), (y − M θ))
2
2
1
1
1
1
(y, y) − (y, M θ) − (M θ, y) + (M θ, M θ)
2
2
2
2
1
1
= (y, y) − (M θ, y) + (M θ, M θ)
2
2
1
1
= (y, y) − (θ, M T y) + (θ, M T M θ)
2
2
となる。ここで、パラメータに関して最小化を行うために、勾配ベクトル ∇J(θ) = 0 とおく。教
科書定理 1.5, 1.6 より
=
∇J = −M T y + M T M θ = 0
2
となるので、M T M が逆行列を持てば
θ = (M T M )−1 M T y
となる。この式は (5) 式と同等である。
’ 例題 4.2’
X=[4 15 30 100 200]’;
M=[X ones(5,1)];
Y=[ -17 -4 -7 50 70]’;
th=inv(M’*M)*M’*Y
plot(X’,Y’,’o’)
hold on
X=(0:250)’;
M=[X ones(251,1)];
Yest=M*th;
figure(1)
plot(X’,Yest’,’r’)
xlabel(’x’)
ylabel(’y’)
hold off
120
100
80
y
60
40
20
0
-20
0
50
100
150
200
250
x
図 1: 変数が 1 つの場合の最小二乗法による推定値
1.2
変数が 2 つ以上の場合
いま,変数 y の値を,l 種類の説明変数 x1 , . . . , xl を用いて推定したいとする.x1 , . . . , xl の値は
容易に取得できるものとする.このとき,y はどのようにして推定できるのであろうか.もっとも
3
簡単なモデルは,線形回帰モデル
y = a0 + a1 x1 + · · · + al xl
(7)
とするものである.係数 a0 , a1 , . . . , al は各変数がそれぞれ y に及ぼす影響の強さを示す.この場
合,y は誤差を含まないが,一般的に,
「真」の y は x1 , . . . , xl で正確に決まることはほとんどなく,
誤差を含むことから,(7) 式を改めて
y = a0 + a1 x1 + · · · + al xl + e
(8)
と書く.ここに,e は誤差項である.これを、重回帰モデルともいう。
重回帰モデルを推定するには,まず,個々のデータに対する (8) 式を縦に並べて改めてベクトル
を太字,行列を大文字で表現した式
y = Mθ + e
(9)
を定義しよう.ただし,上付き y (j) は,j 番目のデータに対する y を示す.他の変数の上付きも同
様である.また

y (1)
 (2)
 y
y=
 ..
 .
y (N )


1



 1
, M =  .

 .

 .
(1)
x2
(2)
x2
..
.
(N )
x2
x1
x1
..
.
1 x1
とおいた.ここで,誤差の 2 乗和
∑N
(1)
(1)
···
xl
(2)
···
..
.
xl
..
.
(N )
· · · xl
(j) 2
j=1 (e )
(2)





, θ = 



(N )


e(1)
a0
 (2)
 e
.. 
, e =  .
. 
 .
 .
al
e(N )






= (y − M θ)⊤ (y − M θ) を最小にすることを考えよ
う.2 乗誤差の極値を与えるパラメータを、1 変数の場合と同じ手順で求めると、
θ̂ = (M ⊤ M )−1 M ⊤ y
(10)
で与えられる.
この場合に,注意が必要なのは,データの個数と独立性である.逆行列を構成する行列 M のサ
イズは N × (l + 1) なので,N < l + 1 の場合は,M の階数が高々N であり,M ⊤ M は決して逆行
列をもたない.つまり,データの個数が,データの次元に満たないときは,回帰モデルは最小2乗
法では係数を一意的に決定できない.
では,データ個数 N が N ≥ l + 1 のときは,いつも θ が求まるのであろうか.実はここで,多
重共線性といわれる問題がある.つまり,説明変数 1, x1 , . . . , xl のうちで一次従属な変数がある
と,いくらデータをたくさん集めても(すなわち,N を大きくしても),M の階数は l 以下にな
り,M ⊤ M は逆行列をもたない.また,たとえ逆行列をもつ場合でも,行列式が 0 に近ければ,得
られた結果は信頼がおけない.
2
多項式の当てはめ
N 個のデータ {(x1 , y1 ), . . . , (xN , yN )} に 2 次式を当てはめよ。
当てはめる式を y = ax2 + bx + c とすると、今までの議論同様、
)2
1 ∑(
yi − (ax2i + bxi + c) → min
J=
2 i=1
N
4
これを最小化するために、(1.2) 同様
y = ax2i + bxi + c + e
とし、全部のデータを縦に並べると


y1
 . 
. 
Y =
 . ,
yN

x21
 .
.
M =
 .
x2N

1
.. 

. 
1
x1
..
.
xN
θ = (M T M )−1 M T Y
X=[-1 0 0 1]’;
Y=[0 -2 -1 0]’;
M=[X.^2 X ones(4,1)];
th=inv(M’*M)*M’*Y
figure(3)
plot(X’,Y’,’o’)
X=(-1.5:0.1:1.5)’;
M=[X.^2 X ones(31,1)];
hold on
Yest=M*th;
plot(X’,Yest’,’r’)
xlabel(’x’)
ylabel(’y’)
hold off
2
1.5
1
y
0.5
0
-0.5
-1
-1.5
-2
-1.5
-1
-0.5
0
0.5
x
図 2: 二次曲線近似
5
1
1.5
表 1: 課題用データ
x
y
z
課題
0.4387
0.2513
1.3825
0.3816
-0.2449
1.1936
0.7655
0.0060
1.5376
0.7952
0.1991
1.6164
0.1869
0.3909
1.2481
0.4898
0.4593
1.4806
0.4456
0.0472
1.3261
0.6463
-0.3614
1.3440
0.7094
-0.3507
1.3913
0.7547
-0.2425
1.4555
0.2760
0.3407
1.2954
0.6797
-0.2457
1.4021
0.6551
0.3143
1.5529
0.1626
-0.2565
1.0369
0.1190
0.4293
1.2121
0.4984
-0.1500
1.3038
0.9597
-0.3034
1.5808
0.3404
-0.2489
1.1636
0.5853
0.1160
1.4445
0.2238
-0.0267
1.1487
表1のデータ (http://carnation.is.konan-u.ac.jp/opt9kadai.txt として保存してある)にお
いて、最小 2 乗法により z を x と y の 1 次式による回帰モデルとして表現せよ。
[ファイルの読み方] まず、データをブラウザで読み、MATLAB のカレントディレクトリ(プロ
グラムが置いてあるところ)に保存する。次に、
data=load(’opt9kadai.txt);
とすれば、データが配列 data に入る。あとは、その 1 列目を x、2 列目を y、3 列目を z として使
えばよい。
[提出物] Word に、以下の内容を示せ。
• 学籍番号、氏名、課題出題日
• 作成した MATLAB プログラムリスト
• 得られた回帰式
• データ z、その推定値、誤差の 2 乗平均(並べて表示)
• 感想
6