行列分解2:特異値分解(Singular value decomposition, SVD)
1.1 Overview
1.2 Matrix Approximation
1.3 Mathematical Properties and
Manipulations
1.4 Pseudo-Inverse, Least-Squares, and
Regression
1.5 Principal Component Analysis (PCA)
1.6 Eigenface Example
1.7 Truncation and Alignment
1.8 Randomized PCA
1.9 Tensor Decomposition and N- Way Data
Analysis
【線形代数の復習】固有値問題とは
固有値問題の定義
あるn×n行列Cが与えられたとき、以下の固有方程式
を満たすn次元ベクトル v
iを固有ベクトル(eigenvector )、λ
iを固有値(eigenvalue )と
と呼ぶ。
i ii
λ=Cv v
対称行列の場合
行列Cがn×n対称行列である場合、すなわち
の場合、行列Cの固有ベクトル v
iは直交系をなし、λ
iは非負である。
=CC
12
1
,
0
0
i j ij n
j
ij
i
δ λλ λ
=
= ≥≥≥≥
≠
=
vv
固有値問題の具体例
固有値問題の例1
20
01
=
C
固有値問題の例2
11
1
,2
0
λ
= =
v
22
0
,1
1
λ
= =
v
31
22
31
22
=
C
11
2
2
,2
2
2
λ
= =
v
22
2
2
,1
2
2
λ
−
= =
v
1
1
2
1
1
v
2
v
2
Cv
1
Cv
1
1
1
v
2
v
2
Cv
1
Cv
x
x x
x
yy
y y
行列対角化としての固有値問題
2
11
22
1
n nn
λ
λ
λ
=
=
=
Cv v
Cv v
Cv v
[ ][ ]
1
2
122
1
00
00
00
nn
n
λ
λ
λ
=
Cvv v vv v
n個の固有方程式
V V
Λ
=CV VΛ
対称行列Cの固有方程式
=V ΛCV
対称行列Cの対角化
Uは直交行列
特異値分解と主成分分析
()
2ˆ
=VX VX Σ
( )
2ˆˆ
=XX U UΣ
( )
2
i ii
σ=XX u u
()
2
i ii
σ=XXv v
( )
1
12
2 21 22 2
12
1 11 1
2
mmm
m
m
m m m mm
×
= = =
∈
x xx xx xx
x xx xx xx
C XX x x x
x xx xx xx
共分散と共分散行列
=C XX
() ()cov ,
ij ijij
xx= =C xx
データx の共分散行列
データx
iとx
jの共分散
(注)通常、共分散は平均値からのずれとして定義される。
平均値を差し引いた値 を新たに と定義し直せば、
と書ける。ここでは平均値を差し引いた値を用いている。
( )( )( )cov ,
jij i
−=−xxxx x x
i
−xx
i
x
( )cov ,
i j ij
=xx xx
主成分分析(Principal Component Analysis, PCA )
主成分分析 :データ から変動の大きさに応じて成分を分析する解析法
各データ に係数 で重み付けした を考える。
x
1
i
m
i
i
v
=
= =∑y x Xv
{}
i
x {}
i
v y
の分散は以下で与えられる。y
()var= =y y y v Cv
主成分分析の計算法: ノルムが1であるようなベクトルv で、上記の分散
var(y)を最大にするものを求めよ。
1
ˆargmax
=
=
v
v v Cv
主成分分析(Principal Component Analysis, PCA )
主成分分析で解くべき問題
もしくは
1
ˆargmax
=
=
v
v v Cv
maximize subject to 1=v Cv v v
解法:固有値方程式
もしくは
λ=Cvv
=CV VΛ
( ) ( )
11
diag , ,,
mm
λλ==Vv v Λ
主成分分析の図形的解釈
主成分分析で解くべき問題
maximize subject to 1=v Cv v v
具体例(二次元)
二次元ベクトル とし、行列を と取ると、問題(*) は、
10
4
01
=
C
(*)
1
2
v
v
=
v
2
21
2
2
v
v
+
22
12
1vv+=
の制約条件のもと、 を最大化せよ
1
v
2
v
1
v
2
v
1
v
2
v
1
v
2
v
主成分分析の例:固有顔(Eigenface )
load ../DATA/allFaces.mat
% We use the first 36 people for training data
trainingFaces= faces(:,1:sum(nfaces (1:36)));
avgFace= mean(trainingFaces,2); % size n*m by 1; 36名の顔の平均を計算
% compute eigenfaces on mean- subtracted training data
X = trainingFaces -avgFace*ones(1,size(trainingFaces,2)); % データから平均顔を引く
[U,S,V] = svd(X,‘econ’ ); % size n*m by 1; エコノミーSVDを計算
figure, axes('position',[0 0 1 1]), axis off
imagesc(reshape(avgFace,n,m )), colormap gray
% 固有顔の最初50成分を表示
fori=1:50 % plot the first 50 eigenfaces
pause(0.1); % wait for 0.1 seconds
imagesc(reshape(U(:,i),n,m)); colormap gray ;
end
CH01_SEC06_2_3_4_production.m 固有顔の計算
主成分分析の例:固有顔(Eigenface )
第1主成分 u
1 第2主成分 u
2 第3主成分 u
3 第4主成分 u
4 第5主成分 u
5
ˆˆ
=XUΣV
データ行列の特異値分解 ˆ
=U 1
u
2
u
m
u左特異ベクトル行列
左特異ベクトルは、顔を特徴づける基底ベクトルである。
主成分分析の例:固有顔(Eigenface )
%% Now show eigenface reconstruction of image that was omitted from test set
testFace= faces(:,1+sum(nfaces(1:36))); % first face of person 37
axes('position',[0 0 1 1]), axis off
imagesc(reshape(testFace,n,m)), colormap gray
testFaceMS= testFace-avgFace;
forr=25:25:2275
reconFace = avgFace + (U(:,1:r)*(U(:,1:r)'*testFaceMS));
imagesc(reshape(reconFace,n,m)), colormap gray
title(['r=',num2str(r,'%d')]);
pause(0.1)
end
CH01_SEC06_2_3_4_production.m 固有顔による被験者37の顔再構成
approx average rr
= +x x UUx
主成分分析の例:固有顔によるターゲット顔の再構成
平均顔 r=60 r=120 r=180 r=240 r=300 ターゲット顔
() ()
approx average
1
average 1
average 1 1
r
rr
rr
r
= +
= +
+ += +
x x UUx
u
xuu x
u
x uxu uxu
特異値分解による行列近似(復習)
X= 1
u
1
v
1
σ
r
u
r
v
r
σ++
1r+
u
1r+
v
1r
σ
+ m
u
m
v
m
σ+++
=
1
u
1
v
1
σ
r
u
r
v
r
σ++
X
特異値分解における行列近似とは・・・
寄与の小さい成分 (r+1:m) を打ち切る
(truncate)こと
ではどれくらいの成分を残すべきか?
(=打ち切り次元 rをどう選ぶべきか?)
特異値分解による行列近似(復習)
2
2
F
1
m
j
j
σ
=
=∑X
1
2
2
F
j
r
j
σ
=
=∑X
データ行列 の変動
近似行列 の変動X
X
(データ行列 の変動)X
(近似行列 の変動)X
1
2
1
2
r
m
j
j
j
j
σ
σ
=
=
=
∑
∑