第2回

!
プログラマのための数学LT会
20170719 

!
根上 春
自己紹介
薬学から応用数学へ転向

!
グラフ理論と機械学習を用いた創薬手法について研究

!
!
!
プログラミングはほぼ独学なので、この機会にぜひいろ
んな方とお知り合いになりたい!

!
グラフマイニングの高速アルゴリズムに興味あり

!
親知らずは抜かずに砕いて取りました
今日のおはなし
行列は、データ分析の様々な場面で用いられる

!
その行列の持つ性質を知るために重要な、行列の
固有値、固有ベクトルについて解説する

!
定義は分かるけれども、どんな意味を持つのか?
を3つのケースを例にざっくりと解説する

!
まとめ
!
行列の固有値・固有ベクトルは行列の特徴を表す

!
行列として何を考えるかによって様々なデータ分
析に適用できる

線形変換

グラフのラプラシアン

!
固有値・固有ベクトルの計算は、精度や速度の観
点で課題があり各課題を解決するアルゴリズムが
作られている



数学を応用するプロセス
数学の知見を得る 現実の課題を

把握する
変数を・定数に具体的な対象を代入
アルゴリズムを実装する
※個人の感想です
本日の発表の構成
行列の知識を得る どんな課題が

解けるのか知る
どのように解くかを知る
実装上の問題点を知る
行列とは
行列とは、要素を長方形にならべてまとめたもの
(横にn個、縦にm個。n, mは正整数。今日はn×n
のn次正方行列のみ扱う。)

!
行列のi行j列にある要素のことを(i,j)-成分という

!
足し算と掛け算の計算のルールが定められている
a11 ! a1m
! aij !
an1 ! anm
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
横向きに上から→

1行

2行

↓縦向きに左から

1列2列…
行列に定められる足し算
行列同士の足し算は、同じ位置にある数同士を足
して行う

縦横の数はそれぞれ一致している必要がある

引き算の場合も同様である
a11 ! a1m
! !
an1 ! anm
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
+
b11 ! b1m
! !
bn1 ! bnm
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
=
a11 + b11 ! a1m + b1m
! !
an1 + bn1 ! anm + bnm
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
c11 ! c1l
! !
cn1 ! cnl
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
=
a11 ! a1m
! !
an1 ! anm
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
×
b11 ! b1l
! !
bm1 ! bml
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
行列に定められる掛け算
行列同士のかけ算は、答えの行列の(i,j)-成分が次
の式を満たすように行う

!
cij = aik ⋅bkj
k=1
m
∑
!
n次正方行列Aの固有値λとその固有ベクトルxは
次のように定まる ※λは複素数、X≠0

!
!
!
!
!
!
!
!
!
!
!
固有値とは、重複を許してn個ある

!
!
!
!
a11 ! a1n
! !
an1 ! ann
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
x1
!
xn
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
= λ
x1
!
xn
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
行列の固有値・固有ベクトル
A⋅x = λ ⋅x
!
固有値は、特性方程式

!
!
!
!
!
を解くことで求められる(必要十分)

個々のλの値ごとにベクトルXを求める

I はn次の単位行列、det(B)は行列Bの行列式を表す

!
!
!
!
!
!
行列の固有値・固有ベクトル
det(A − λI) = 0
(λ1,x1),!,(λn,xn )
!
!
!
!
!
!
!
!
 の固有値と固有ベクトルを求める

!
!
!
A =
8 1
4 5
⎛
⎝⎜
⎞
⎠⎟
例)2次元のとき
!
!
!
!
!
!


より、

!
!
!
!
!
!
Ax − λx =
8 1
4 5
⎛
⎝⎜
⎞
⎠⎟
x1
x2
⎛
⎝
⎜
⎞
⎠
⎟ − λ
x1
x2
⎛
⎝
⎜
⎞
⎠
⎟ =
0
0
⎛
⎝⎜
⎞
⎠⎟
x1
x2
⎛
⎝
⎜
⎞
⎠
⎟ ≠
0
0
⎛
⎝⎜
⎞
⎠⎟
2次元のとき
8 1
4 5
⎛
⎝⎜
⎞
⎠⎟ − λ
1 0
0 1
⎛
⎝⎜
⎞
⎠⎟
⎧
⎨
⎪
⎩⎪
⎫
⎬
⎪
⎭⎪
x1
x2
⎛
⎝
⎜
⎞
⎠
⎟ =
0
0
⎛
⎝⎜
⎞
⎠⎟
!
!
!
!
!
!
!
より、

!
!
!
!
を解く。

!
2次元のとき
8 1
4 5
⎛
⎝⎜
⎞
⎠⎟ − λ
1 0
0 1
⎛
⎝⎜
⎞
⎠⎟
⎧
⎨
⎪
⎩⎪
⎫
⎬
⎪
⎭⎪
x1
x2
⎛
⎝
⎜
⎞
⎠
⎟ =
0
0
⎛
⎝⎜
⎞
⎠⎟
det
8 1
4 5
⎛
⎝⎜
⎞
⎠⎟ − λ
1 0
0 1
⎛
⎝⎜
⎞
⎠⎟
⎛
⎝
⎜
⎞
⎠
⎟ = 0
!
!
!
!
!
!
!
!
!
!
!
!
2次元のとき
det
8 1
4 5
⎛
⎝⎜
⎞
⎠⎟ − λ
1 0
0 1
⎛
⎝⎜
⎞
⎠⎟
⎛
⎝
⎜
⎞
⎠
⎟
= det
8 − λ 1
4 5 − λ
⎛
⎝⎜
⎞
⎠⎟
⎛
⎝
⎜
⎞
⎠
⎟
= (8 − λ)(5 − λ)−1× 4
= (λ − 4)(λ − 9) = 0
λ = 4,9
のとき

!
!
!
!
!
	 	 	 	 	 を解くと、

!
!
!
!
!
(tは任意の定数。t≠0)λ=9のときは省略
2次元のとき
λ = 4
8 − 4 1
4 5 − 4
⎛
⎝⎜
⎞
⎠⎟
x1
x2
⎛
⎝
⎜
⎞
⎠
⎟ =
0
0
⎛
⎝⎜
⎞
⎠⎟
4x1 + x2 = 0
t
−1
4
⎛
⎝⎜
⎞
⎠⎟
様々な行列を考えると、その固有値・固有ベクト
ルは様々な性質を持つ

!
解きたい課題に応じて、何を行列とするのか、固
有値・固有ベクトルは何を意味するのか、を考え
ることが重要

!
というお話をします
これだけではよくわからないので…
本日の発表の構成
行列の知識を得る どんな課題が

解けるのか知る
どのように解くかを知る
実装上の問題点を知る
画像処理(線形変換)

!
!
データの次元圧縮

!
!
ネットワーク構造を持つデータの

クラスタリング

!
…など
どんな課題が解けるのか
!
!
!
データの次元圧縮

!
!
ネットワーク構造を持つデータの

クラスタリング

!
…など
画像処理(線形変換)
どんな課題が解けるのか
!
!
!
!
!
!
!
!
!
!
!
!
!
!
線形変換を表す行列を利用して、画像の回転や射影
を行うことができる

画像の回転・射影
https://codeiq.jp/magazine/2015/07/25421/
詳しくはプログラマのための数学勉強会2

佐野さんの講演資料をご参照ください。
固有値・固有ベクトルとは、線形変換によって向き
が変わらないベクトル(大きさは固有値倍になる。)
!
!
!
!
!
!
!
!
!
!
!
画像の回転・射影
引用:https://codeiq.jp/magazine/2015/07/25421/
「固有ベクトルを基底に取ることができれば、

変換はとても簡単に表せる(特に固有ベクトルで基底が取れれ
ば、行列は変倍変換の形になる)」と佐野氏

!
!
!
!
!
!
!
!
!
!
!
!
!
!
画像の回転・射影
引用:https://codeiq.jp/magazine/2015/07/25421/
画像の回転・射影
引用:https://codeiq.jp/magazine/2015/07/25421/
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
Ax = λx
線形変換を

表す行列 座標軸
λxから

Aを求める
画像処理(線形変換)

!
!
!
!
!
ネットワーク構造を持つデータの

クラスタリング

!
…など
どんな課題が解けるのか
データの次元圧縮
!
データの持つ情報を落とさずに、
データの次元を落とすために、分
散が最大になる軸を探したい

!
分散共分散行列Σを考える

!
!
!
!
!
!
!
	 	 :確率変数iの分散

!
	 	 :確率変数i, jの共分散

データの次元圧縮
=
σ1
2
! σ1n
! " !
σ1n ! σn
2
⎛
⎝
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
∑
σi
2
σ1n
!
!
Σの固有ベクトル Xi に対応する固
有値 λi は式変形によって各ベクト
ルに対応する分散とみなせ、この
分散が大きくなる固有ベクトルを
用いて次元の圧縮ができる

!
主成分分析などで用いられる

!
!
!
!
!
!
!
データの次元圧縮
線形変換(回転・射影)
https://codeiq.jp/magazine/2015/07/25421/
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
Ax = λx
分散共分散
行列
適切な

座標軸
Aから

λ最大のxを
を求める
画像処理(線形変換)

!
!
データの次元圧縮

!
!
!
!
…など
どんな課題が解けるのか
ネットワーク構造を持つデータの

クラスタリング
ネットワークのクラスタリング
A
B
C
D
?
世の中は様々なつながりで満ちている
ネットワークのクラスタリング
A
B
C
D
?
そのネットワークのクラスタを知りたい

と思う状況はしばしば起こる
!
ネットワークを表す行列1

(隣接行列A)
A
B
C
D
ネットワークを構成するメンバーを1からnまで順に番号付
け、n次正方行列を次の様に定める。 は、iとjのつながり
の重みとする。

		 	 	 	 

		 	 	 	 	 	 i-jの間につながりがあるとき

		 

		 	 	 	 	 	 i-jの間につながりがないとき

!
aij =
wij
0
⎧
⎨
⎪
⎩⎪
wij
A
B
C
D
0 1 0 0
1 0 0 0
0 0 0 1
0 0 1 0
⎛
⎝
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
A B C D
ネットワークを表す行列1

(重み付き隣接行列のバリエーション)
A
B
C
D
1
50
50
100 A
B
C
D
0 100 0 0
1 0 0 0
0 0 0 50
0 0 50 0
⎛
⎝
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
A B C D
1
2
3
4
5
6
0 1 0
1 0 1
0 1 0
0 0 1
0 0 0
1 0 0
0 0 1
0 0 0
1 0 0
0 1 0
1 0 1
0 1 0
⎛
⎝
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
⎟
⎟
⎟
1 2 3 4 5 6
ネットワークを表す行列2

(次数行列D)
A
B
C
D
各メンバー i の重み付き次数  を次のように定め
る	 	 	 	 

!
!
!
!
	 

Di = wij
j=1
n
∑
Di
A
B
C
D
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
⎛
⎝
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
A B C D
グラフのラプラシアン

(エッジの重みが1の場合)
ラプラシアン行列Lを、

次数行列D-隣接行列Aと定義する
A
C
D
B
1 0 0 −1
0 1 −1 0
0 −1 1 0
−1 0 0 1
⎛
⎝
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
A
B
C
D
A B C D
次数
隣接
グラフのラプラシアン

(エッジの重みが1の場合)
対角成分は、つながっている辺の数

リンクがある場合:−1

それ以外:0

今回は簡単のためエッジの重みが均等でない場合を考えています。
A
C
D
B
1 0 0 −1
0 1 −1 0
0 −1 1 0
−1 0 0 1
⎛
⎝
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
A
B
C
D
A B C D
詳しい解説はこちらなど:http://www.math.ucsd.edu/~fan/research/cb/ch1.pdf
スペクトラルクラスタリング
先程の行列の固有値・固有ベクトルを求
めると、λ=0となる場合がある

!
!
!
!
!
!
!
1 0 0 −1
0 1 −1 0
0 −1 1 0
−1 0 0 1
⎛
⎝
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
x1
x2
x3
x4
⎛
⎝
⎜
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
⎟
= 0 ×
x1
x2
x3
x4
⎛
⎝
⎜
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
⎟
=
0
0
0
0
⎛
⎝
⎜
⎜
⎜
⎜
⎞
⎠
⎟
⎟
⎟
⎟
詳しい解説はこちらなど:http://www.cs.cmu.edu/~aarti/Class/10701/readings/Luxburg06_TR.pdf
スペクトラルクラスタリング
!
!
!
!
!
!
!
!
を解くと、

!
固有ベクトルとして 

t(1,0,0,1), s(0,1,1,0)が取れる

x1 − x4 = 0
x2 − x3 = 0
−x2 + x3 = 0
−x1 + x4 = 0
⎧
⎨
⎪
⎪
⎩
⎪
⎪
x1 − x4 = 0,x2 − x3 = 0
詳しい解説はこちらなど:http://www.cs.cmu.edu/~aarti/Class/10701/readings/Luxburg06_TR.pdf
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
Ax = λx
グラフの

ラプラシアン
各グループ
を構成する
要素
Aから

メンバーの

部分集合を表すxを
求める
スペクトラルクラスタリング
固有値問題を解くことでグラフの分割、
即ちデータのクラスタリングができる※

!
固有値0に対応する固有ベクトルが連結
部分グラフの頂点集合(各クラスタを形
成するメンバーの集合)を示している。

!
!
最近では、ラプラシアン行列を使わず
deep learningと合わせたアルゴリズム
も開発されている

!
!
Deep Spectral Clustering Learning 

MT Law (2017) ICML

!
Similarity matrixの固有値計算から

!
http://www.cs.toronto.edu/~law/publications/
ICML/2017/final_version.pdf
※厳密に分割できることは応用上少ないので、様々な工夫がなされている

(次元圧縮してKmeans)
本日の発表の構成
行列の知識を得る どんな課題が

解けるのか知る
どのように解くかを知る
実装上の問題点を知る
実装上の課題
理論上、固有値は以下の特性方程式を解くことで
求められる

!
det(X) はXの行列式のこと

対角成分にλがn回出てくるので、この特性方程
式はn次方程式となる。

五次以上の代数方程式は代数的な一般解が存在し
ない

プログラマのための数学勉強会3 辻さん
https://codeiq.jp/magazine/2015/07/25424/

行列の性質に合わせた高速アルゴリズムが開発さ
れている

べき乗法・Arnoldi法
det(A − λI) = 0
まとめ
!
行列の固有値・固有ベクトルは行列の特徴を表す

!
行列として何を考えるかによって様々なデータ分
析に適用できる

線形変換

グラフのラプラシアン

!
固有値・固有ベクトルの計算は、精度や速度の観
点で課題があり各課題を解決するアルゴリズムが
作られている




第2回プログラマのための数学LT会