大規模データ解析応用事例
6. 回帰分析とモデル選択1
情報工学部 知能情報工学科 田中宏和
講義スケジュール
1. 講義概要 & MATLAB入門
2. 行列分解1:特異値分解、行列近似、最小二乗法、擬逆行列
3. 行列分解2:主成分分析、固有顔、次元打ち切り、ランダム化SVD
4. スパース性と圧縮センシング1:フーリエ変換、圧縮センシング
5. スパース性と圧縮センシング2:スパース回帰、スパース分類、RPCA
6. 回帰分析とモデル選択1:線形回帰、非線形回帰、数値最適化
7. 回帰分析とモデル選択2:モデル選択、交差検証法、情報量基準
8. クラスタリングと分類分析1:特徴抽出、クラスタリング法
9. クラスタリングと分類分析2:教師あり学習、分類分析
10. ニューラルネットワーク1:パーセプトロン、誤差逆伝播法
11. ニューラルネットワーク2:確率勾配法、深層ネットワーク
12. 発展学習:神経データ解析
回帰分析とモデル選択1
4.1 Classical Curve Fitting
4.2 Nonlinear Regression and Gradient
Descent
4.3 Regression and Ax=b: Over- and Under-
Determinant systems
4.4 Optimization as the Cornerstone of
Regression
4.5 The Pareto Front
4.6 Model Selection : Cross-Validation
4.7 Model Selection: Information Criteria
回帰分析とモデル選択1
% 4.1 Classical Curve Fitting
CH04_SEC01_LinearRegression.m
% 4.2 Nonlinear Regression and Gradient Descent
CH04_SEC02_1_GradientDescent.m
% 4.3 Regression and Ax=b
CH04_SEC03_1_OverUnderDetermined.m
CH04_SEC03_1_OverUnderDetermined_production.
m
% 4.4 Optimization as Cornerstone of Regression
CH04_SEC04_1_CompareRegression.m
CH04_SEC04_1_CompareRegression_production.m
% 4.6 Model Selection: Cross-Validation
CH04_SEC06_1_kFoldValidation.m
CH04_SEC06_1_kFoldValidation_production.m
% 4.7 Model Selection: Information Criteria
CH04_SEC07_1_ModelValidation.m
CH04_SEC07_2_RegressAIC_BIC.m
回帰分析とモデル選択1
1. 回帰問題における外れ値問題
最小二乗法の問題点
ロバスト線形回帰
2. 最適化問題としての回帰問題
最小二乗法
勾配降下法
3. LASSO回帰
優決定系におけるスパース回帰
線形回帰問題と最適化問題
線形回帰問題 が与えられたとして、以下の線形方程式を満たす を求める
=Ax b
,n m n×
∈ ∈A b  m
∈x 
優決定系(n>m)
2
2
min −
x
Ax b
2
2 1
min λ− +
x
Ax xb
( )
2
2
min gλ− +
x
xAx b
劣決定系(n<m)
1
min subject to
x
x Ax = b
1 2
min subject to ε− ≤
x
x Ax b
( ) 2
min subject tog ε− ≤
x
x Ax b
線形回帰問題:複数評価関数の比較
線形回帰問題:n個のデータ点
が与えられたとき、この関係を線形モデル
でモデル化する問題(線形回帰)を考える。このとき、実際のデータと線形モデルの間に誤
差が出る。その誤差を最小にするようにモデルを選べばよい(=係数を決めればよい)。
誤差関数の選び方で、線形モデルの振る舞いがどう変わるか、見てみよう。
( ) ( ) ( )21 1 2, , , ,, , n ny yx x x y
( )0 1 0 1, ,f x xβ β β β= +
( )( ) ( )
22
2 1 2
1
0
1 1
, , ;
n
kk
k
E f x y
n n
β β
=
= − = −∑ f x β y
( ) ( )01
1
1 1
1 1
, , ;k
n
k
k
E f x y
n n
β β
=
= −= −∑ βf x y
( ) ( )0 1max , , ;kk
k
E f x yβ β∞ ∞
= − = −f x β y
L2ノルム
L1ノルム
L∞ノルム
( )
( )
( )
1 0 1 1
1 0 1,
;
;
;
,
,
n n
n
f x y
f x y
β β
β β
   
   
= =

∈ ∈   
 
  
f x β y   
ここで
【復習】ベクトルのノルム
( )2
1
2 2 22
1 22
1
n
n i
i
x xx x
=
= + + =+ ∑x 
( )1 2, , , n
nx x x= ∈x  

( )2
1
1
1
1
n pp p p pp
i
i
np
x x x x
=
 
= + ++ =  
 
∑x 
n次元ベクトル
ユークリッド距離
Lp ノルム(距離)
1
4
1=x 1∞
=x1
2
1=x
1
1=x 3
2
1=x
2
1=x 4
1=x
線形回帰問題:複数評価関数の比較1
( )( )
2
2 0 1
1
1
, ,k
k
k
n
E f x y
n
β β
=
−∑
( )01 1
1
1
, ,k k
n
k
E f x y
n
β β
=
−∑
( )0 1max , , kk
k
E f x yβ β∞ −
例1:外れ値がない「きれいなデータ」の場合
どの誤差関数もほぼ同じ線形モデル。
CH04_SEC01_LinearRegression.m
% The data
x=[1 2 3 4 5 6 7 8 9 10];
y=[0.2 0.5 0.3 0.7 1.0 1.5 1.8 2.0 2.3 2.2];
線形回帰問題:複数評価関数の比較2
例2:外れ値を含むデータの場合
E1は外れ値に対して頑健!
外れ値(outlier)
CH04_SEC01_LinearRegression.m
( )( )
2
2 0 1
1
1
, ,k
k
k
n
E f x y
n
β β
=
−∑
( )01 1
1
1
, ,k k
n
k
E f x y
n
β β
=
−∑
( )0 1max , , kk
k
E f x yβ β∞ −
% The data
x=[1 2 3 4 5 6 7 8 9 10];
y=[0.2 0.5 0.3 3.5 1.0 1.5 1.8 2.0 2.3 2.2];
線形回帰問題:複数評価関数の比較
% 外れ値を含むデータ
x=[1 2 3 4 5 6 7 8 9 10];
y=[0.2 0.5 0.3 3.5 1.0 1.5 1.8 2.0 2.3 2.2];
% 外れ値を含まないデータ
x=[1 2 3 4 5 6 7 8 9 10];
y=[0.2 0.5 0.3 0.7 1.0 1.5 1.8 2.0 2.3 2.2];
p1=fminsearch('fit1',[1 1],[],x,y); % L_infinity norm
p2=fminsearch('fit2',[1 1],[],x,y); % L1 norm
p3=fminsearch('fit3',[1 1],[],x,y); % L2 norm
xf=0:0.1:11;
y1=polyval(p1,xf); y2=polyval(p2,xf); y3=polyval(p3,xf);
CH04_SEC01_LinearRegression.m fit1.m (L∞ norm)
function E=fit1(x0,x,y)
E=max(abs( x0(1)*x+x0(2)-y ));
fit2.m (L1 norm)
fit3.m (L2 norm)
function E=fit2(x0,x,y)
E=sum(abs( x0(1)*x+x0(2)-y ));
function E=fit3(x0,x,y)
E=sum(abs( x0(1)*x+x0(2)-y ).^2 );
最適化問題の数値解法 fminsearch
p1=fminsearch('fit1',[1 1],[],x,y);
function E=fit1(x0,x,y)
E=max(abs( x0(1)*x+x0(2)-y ));
例1:関数mファイルを別個に用意する方法
最適化する関数 パラメタの初期値 関数に与えるほかのデータ
例2:無名関数(inline function)を用いる方法
q1=fminsearch(@(x0,x,y) max(abs( x0(1)*x+x0(2)-y )), ...
[1 1],[],x,y); % L_infinity norm
ここで演習
• 最適化による線形回帰問題の例
CH04_SEC01_LinearRegression.m
コードを走らせてみましょう。データの値を変更し、外れ値があるときのL1, L2, L∞
ノルム解の振る舞いを調べてみましょう。
y=[0.2 0.5 0.3 0.7 1.0 1.5 1.8 2.0 2.3 2.2]
• 上記のコードに追加して、L1/2ノルム解を計算してみましょう。
( )( )1
1/
2
2
1/2
1
0, , k
n
k
k
E f x yβ β
=
 
= − 
 
∑
ここで演習
• 最適化による線形回帰問題の例
CH04_SEC01_LinearRegression.m
コードを走らせてみましょう。データの値を変更し、外れ値があるときのL1, L2, L∞
ノルム解の振る舞いを調べてみましょう。
y=[0.2 0.5 0.3 0.7 1.0 1.5 1.8 2.0 2.3 2.2]
y=[0.2 0.5 0.3 3.5 1.0 1.5 1.8 2.0 2.3 2.2]
上記のコードに追加して、L1/2ノルム解を計算してみましょう。
( )( )1
1/
2
2
1/2
1
0, , k
n
k
k
E f x yβ β
=
 
= − 
 
∑
q4=fminsearch(@(x0,x,y) sum(abs( x0(1)*x+x0(2)-y ).^(0.5) )^2,[1 1],[],x,y); % L1/2 norm
線形回帰分析再び:最小二乗法と解析解
( )0 1 0 1, ,f x xβ β β β= +
( ) ( )
2
2 0 1 0 1
1
,
1
k
k
n
kE x y
n
β β β β
=
−+= ∑
( )1
1
2
0
0
2
0k
k
k
n
E
x y
n
β β
β =
=
∂
∂
+ − =∑
( )0
1
2
1
1
2
0
k
k k k
n
E
x x y
n
β β
β =
∂
= +
∂
− =∑
0
2 1
1 1
1 1 1
n n
k
k k
n n n
k
k k
k k
k
k
k
n x y
x x x y
β
β
= =
= = =
   
       = 
    
   
   
∑ ∑
∑ ∑ ∑
ステップ1:
係数に関して
偏微分
ステップ2:
行列の形にま
とめる
ステップ3:
行列方程式を
解く
1
1 1
1 1 1
0
21
n n
k k
n n n
k k k
k k
k k k k
n x y
x x x y
β
β
−
= =
= = =
   
        = 
    
   
   
∑ ∑
∑ ∑ ∑
線形回帰モデル
L2ノルム最小化としての線形回帰問題
線形回帰分析再び:最小二乗法と解析解
( ) 2
0 1 0 1 2,,f x x xβ β β β β= + +
( ) ( )
2
1
2
2 0 1 0 1 2
1
, k
n
k
k
kE x x y
n
β β β β β
=
= + −+∑
ここで演習1:前スライドの計算と同様の式を導いてみよう
(下記の・・・の部分を計算してみよう)
2
0
0
E
β∂
=
∂
=
1
2
0
E
β∂
=
∂
=
2
2
0
E
β∂
=
∂
=
0
1
2
β
β
β
    
    
=    
    
    
   
   
   
ここで演習2:線形回帰式を解くMATLABコードを書いてみよう。
ステップ1:
係数に関して
偏微分
ステップ2:
行列の形にま
とめる
ステップ3:
行列方程式を
解く
1
0
1
2
β
β
β
−
     
     
=     
     
     
   
   
   
非線形回帰問題
一般に、入力と出力の関係は線形とは限らない → 非線形回帰問題
( ),f f x= β
( ) ( )( )
1
2
2 ,
n
k
k kE f x y
=
= −∑β β
( )0 ,1,
i
mi
E
β
= =
∂
∂

2
1
2
2 2
2
m
E
E
E
E
β
β
β
∂
∂
∂
∂∇
∂
 ∂
 
 
 
 
= = 
 
 


 
β 0

一般に、入力と出力の関係は線形とは限らない → 非線形回帰問題
非線形最小化問題の解法の基本:勾配降下法
( )
1 2
, , ,
n
f f f
f
x x x
 ∂ ∂ ∂
∇= = 
∂ ∂ ∂ 
x 0

( )1k k k kfδ+= − ∇xx x
非線形関数の最小化問題:勾配が0になる点を探す
( ) ( )
( ) ( ) ( )2
k k
k
k k k
f f
f f f
δ
∇
=
∇
∇ ∇ ∇
x x
x x x


勾配降下法(Gradient descent method)
非線形最小化問題の解法の基本:勾配降下法
学習係数 δ をどう決めるか
optδ δ< optδ δ=
optδ δ> opt2δ δ>
非線形最小化問題の解法の基本:勾配降下法
学習係数の決め方:ラインサーチ法
( )( )opt 1arg min kf
δ
δ δ+= x
非線形最小化問題の解法の基本:勾配降下法
学習係数の決め方:ラインサーチ法
( )( )opt 1arg min kf
δ
δ δ+= x
( )( ) ( )
( )( ) ( )1 1 1
1
1
0
k k k
k k
k
f f
f f
δ
δ δ
+ + +
+
+
∂ ∂

∂
= =− ∇ ∇
∂ ∂ ∂
 
= 
 
x x x
x x
x


( ) ( ) ( ) ( ) ( )2 2
1k k k kf f f fδ δ+∇ =∇ − ∇ ∇ +x x x x 
( )
( ) ( ) ( )
2
opt 2
2k
k k k
f
f f f
δ
∇
=
∇
∇ ∇
x
x x x

学習係数δに関する偏微分が0になる条件を解く
学習係数δが小さいとして、テイラー展開する
非線形最小化問題の解法の基本:勾配降下法
学習係数の決め方:ラインサーチ法
( )
( ) ( ) ( )
opt 2
2
2
f
f f f
δ
∇
∇
=
∇ ∇
x
x x x

( )
( )
( )
( )
2
1
n
f
f
f
f
∂ 
 
∂ ∇ =
 
  ∂ 
x
x
x
x

( )
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
1
2
1 1 2
2
1
2
2
2 1 2 2
2
n
n
n nn
f f f
f f f
f
f f f
 ∂ ∂ ∂ ∂ ∂
 
∂ ∂ ∂ ∂ ∂ ∇ =
 
  ∂ ∂ ∂ ∂ ∂ 
x x x
x x x
x
x x x


   

gradient Hessian matrix
( ) ( ){ } ( ) ( ) ( ) ( ) ( ) ( )
2 2
1
2
2
11
,
n
i
n n
i i
i j
j j
i
f f f ff f f f
= ==
∇ ∂ ∇ ∇= ∇ = ∂ ∂ ∂ ∂∑∑∑ x x x xx x x x

非線形問題の解法の基本:勾配降下法(2次元の例)
CH04_SEC02_1_GradientDescent.m
例1
例2
( ) 2 2
3f x y= +x
( )
( ) ( ) ( ) ( )
2 2 2 2
3 3 3 3
2 1.6exp exp
20 10
x y x y
f
   + + + − + −
=− − − −   
   
   
x
非線形問題の解法の基本:勾配降下法(例1)
Fquad=X.^2+3*Y.^2;
x(1)=3; y(1)=2; % initial guess
f(1)=x(1)^2+3*y(1)^2; % initial function value
for j=1:10
del=(x(j)^2 +9*y(j)^2)/(2*x(j)^2 + 54*y(j)^2);
x(j+1)=(1-2*del)*x(j); % update values
y(j+1)=(1-6*del)*y(j);
f(j+1)=x(j+1)^2+3*y(j+1)^2;
if abs(f(j+1)-f(j))<10^(-6) % check convergence
break
end
end
CH04_SEC02_1_GradientDescent.m
例1 ( ) 2 2
3f x y= +x
( ) ( )
2 2 2
2
opt 2 22
9
2 54
f y
f f
x
x yf
δ
∇ +
=
∇ +∇
=
∇

非線形問題の解法の基本:勾配降下法(例1)
非線形問題の解法の基本:勾配降下法(例1)
非線形問題の解法の基本:勾配降下法(例1)
for j=1:10
del=fminsearch('delsearch',0.2,[],x(end),y(end),dfx,dfy,X,Y,F);
% optimal tau
x(j+1)=x(j)-del*dfx; % update x, y, and f
y(j+1)=y(j)-del*dfy;
f(j+1)=interp2(X,Y,F,x(j+1),y(j+1));
dfx=interp2(X,Y,dFx,x(j+1),y(j+1));
dfy=interp2(X,Y,dFy,x(j+1),y(j+1));
if abs(f(j+1)-f(j))<10^(-6) % check convergence
break
end
end
CH04_SEC02_1_GradientDescent.m
例2 ( )
( ) ( ) ( ) ( )
2 2 2 2
3 3 3 3
2 1.6exp exp
20 10
x y x y
f
   + + + − + −
=− − − −   
   
   
x
非線形問題の解法の基本:勾配降下法(例2)
非線形問題の解法の基本:Alternating descent method
非線形問題の解法の基本:Alternating descent method
非線形問題の解法の基本:Alternating descent method
非線形問題の解法の基本:fminsearch
例1
例2
( ) 2 2
3f x y= +x
( )
( ) ( ) ( ) ( )
2 2 2 2
3 3 3 3
2 1.6exp exp
20 10
x y x y
f
   + + + − + −
=− − − −   
   
   
x
fun1 = @(x) (x(1)^2+3*x(2)^2);
xopt1 = fminsearch(fun1, [3;4])
% xopt1 =
% 1.0e-04 *
% 0.4130
% 0.1310
fun2 = @(x) 2-1.6*exp(-((x(1)+3)^2+(x(2)+3)^2)/20)-exp(-((x(1)-3)^2+(x(2)-3)^2)/10);
xopt2 = fminsearch(fun2, [-1;-1])
% xopt2 =
% -2.9943
% -2.9943
xopt2 = fminsearch(fun2, [1;1])
% xopt2 =
% 2.8459
% 2.8459
demo_fminsearch.m
ここで演習
• 勾配降下法による最適計算
CH04_SEC02_1_GradientDescent.m
コードを走らせてみましょう。
• 上記のコードで、最適な学習率を用いる代わりに、定数の学習率を用いたら学習が
どのように変化するかを見てみましょう。学習率の値を変化させてみてください。
x(1)=3; y(1)=2; % initial guess
f(1)=x(1)^2+3*y(1)^2; % initial function value
for j=1:10
% del=(x(j)^2 +9*y(j)^2)/(2*x(j)^2 + 54*y(j)^2);
del=0.1;
x(j+1)=(1-2*del)*x(j); % update values
y(j+1)=(1-6*del)*y(j);
f(j+1)=x(j+1)^2+3*y(j+1)^2;
if abs(f(j+1)-f(j))<10^(-6) % check convergence
break
end
end
復習:優決定系(over-determined)と劣決定系(under-determined)
A x b= A x b=
優決定系 (# 方程式) > (# 未定変数) 劣決定系 (# 方程式) < (# 未定変数)
1
min subject to =
x
x Ax b
2
2 1
min λ− +
x
Ax xb
LASSO回帰:優決定系におけるスパース回帰
2
2 1
λ− +x b xA
Least absolute shrinkage and selection operator (LASSO) 解
二乗誤差項
「データへの当てはまり度」
L1ノルム項
「解のスパース度」
• 「データへの当てはまり度」と「解のスパース度」のトレードオフ
• パラメタ λ はそのトレードオフを決める
小さいλ → データによくあてはまるが、密な解
大きいλ → 疎ではあるが、データをうまく説明しない解
• パラメタλ の値を適切に選択する必要がある → 交差検証法(クロスバリデーショ
ン)
LASSO回帰:優決定系におけるスパース回帰
A = randn(100,10); % ランダム観測行列
x = [0; 0; 1; 0; 0; 0; -1; 0; 0; 0]; % 成分3と成分8のみ非ゼロ(疎)
b = A*x + 2*randn(100,1); % 観測値
% 最小二乗解
xL2 = pinv(A)*b;
% LASSOでの解法
[XL1 FitInfo] = lasso(A,b,'CV',10); % LASSO solver
lassoPlot(XL1,FitInfo,‘PlotType’,‘CV’); % 交差検証法による汎化誤差評価
lassoPlot(XL1,FitInfo,‘PlotType’,‘Lambda’); % トレースプロット
xL1 = XL1(:,FitInfo.Index1SE); % 汎化誤差を最小化する最適解
xL1DeBiased = pinv(A(:,abs(xL1)>0))*b;
CH03_SEC05_1_RobustRegression.m
=Ax b
=
2L
+
=x A b
1
2
L 2 1
arg min λ= − +
x
Ax b xx
LASSO回帰:優決定系におけるスパース回帰
交差検証法(クロスバリデーション、CV)による汎化誤差の評価
・全データを訓練データとテストデータに分ける
・訓練データでモデルを構築し、テストデータで汎化誤差を評価する
(注)CVに関しては、次回「モデル選択」の講義で詳しく説明します。
訓練データ
テストデータ
K-folds
(汎化誤差)1
(汎化誤差)2
(汎化誤差)3
(汎化誤差)4
(汎化誤差)5
(汎化誤差)=
1
𝐾𝐾
∑𝑖𝑖=1
𝐾𝐾
(汎化誤差)𝑖𝑖
LASSO回帰:優決定系におけるスパース回帰
交差検証法(クロスバリデーション、CV)による評価:汎化誤差
(平均+1SD)-最小
(平均)-最小
汎
化
誤
差
λ
over-fit
under-fit
最適値
lassoPlot(XL1,FitInfo,'PlotType','CV'); % Cross-validation error
LASSO回帰:優決定系におけるスパース回帰
交差検証法(クロスバリデーション、CV)による評価:トレースプロット
(平均+1SD)-最小
(平均)-最小
lassoPlot(XL1,FitInfo,'PlotType','Lambda'); % Trace plot
ラ
ム
ダ
が
大
き
い
→
ほ
と
ん
ど
の
成
分
が
0
(
疎
)
ラ
ム
ダ
が
小
さ
い
→
ほ
と
ん
ど
の
成
分
が
非
0
(
密
)
*
*
LASSO回帰:優決定系におけるスパース回帰
LASSO解 と最小二乗解 の比較
2L
+
=x A b
1
2
L 2 1
arg min λ= − +
x
x Ax b x
1Lx 2Lx
• 正解の成分3と8は正しく求められている
• しかし0であるべき成分が非ゼロとなる(密)
• 正解の成分3と8のみ非ゼロ(疎)
• 成分3と8は正解より若干小さく求められる
Least absolute shrinkage and selection operator
L1ノルムを最小化 解を縮小 非ゼロ成分を選択(疎)
成分3
成分8
【まとめ】回帰分析とモデル選択1
1. 回帰問題における外れ値問題
最小二乗法の問題点
ロバスト線形回帰
2. 最適化問題としての回帰問題
最小二乗法
勾配降下法
3. LASSO回帰
優決定系におけるスパース回帰

東京都市大学 データ解析入門 6 回帰分析とモデル選択 1