tokyor 第36回lt rで部分空間法

15
Rで部分空間法 2014/2/22() TokyoR #36 LT @Prunus1350

Upload: prunus-1350

Post on 28-May-2015

3.401 views

Category:

Education


1 download

DESCRIPTION

2014/2/22(土)TokyoR 第36回LT

TRANSCRIPT

Page 1: TokyoR 第36回LT Rで部分空間法

Rで部分空間法

2014/2/22(土) TokyoR #36 LT

@Prunus1350

Page 2: TokyoR 第36回LT Rで部分空間法

部分空間法とは

• クラスごとに部分空間を構成する正規直交基底を学習データから求め、入力データを各クラスの部分空間に射影して識別する手法。

Page 3: TokyoR 第36回LT Rで部分空間法

Rでやってみる

Page 4: TokyoR 第36回LT Rで部分空間法

やったこととやらなかったこと

• やったこと• パッケージは使わずにRの基本的な関数などを使用して「部分空間法」の手法を追ってみる。

• やらなかったこと• パラメータチューニング

• 忠実度(各クラスの部分空間の基底の数を決定するのに使用)

• リジェクトの閾値

Page 5: TokyoR 第36回LT Rで部分空間法

使用するデータ

• データマイニングコンペティションサイトKaggleのDigit Recognizer

• 28 × 28のマス目に 0~255の諧調で書かれた手書き文字を「0」から「9」のクラスに識別する。

Page 6: TokyoR 第36回LT Rで部分空間法

トレーニングデータをクラス別に分割

> # トレーニングデータ読込> train <- read.csv("train.csv")

> # トレーニングデータをクラス別に分割> for (i in 0:9){+ assign(paste("train", i, sep=""), subset(train, train$label==i)[-1])+ }

Page 7: TokyoR 第36回LT Rで部分空間法

• クラスごとに相関行列の固有値と固有ベクトルを求める

特異値分解

> # クラス0のデータ行列を特異値分解> svd0 <- svd(t(train0))

> # 固有ベクトルが正規直交基底を成していることを確認> svd0$u[,1] %*% svd0$u[,1]

[,1][1,] 1> svd0$u[,1] %*% svd0$u[,2]

[,1][1,] 1.532557e-16

> # 固有ベクトルが行ベクトルになるように転置してCSV出力> write.csv(t(svd0$u), file = "svd0.csv", row.names=F)

1.532557e-16

Page 8: TokyoR 第36回LT Rで部分空間法

• 可視化にはProcessing (http://processing.org/) を使用

• 正規化されたままの状態で可視化するとほぼ白い画像になってしまうので、適当な定数を掛けている

• 黒色が正の方向、赤色が負の方向を表し、色の濃さが値の大きさを表す

正規直交基底を可視化

第5主成分

第2主成分 第3主成分 第4主成分第1主成分

第6主成分 第7主成分 第8主成分

Page 9: TokyoR 第36回LT Rで部分空間法

他のクラスも同様に

Page 10: TokyoR 第36回LT Rで部分空間法

他のクラスも同様に

Page 11: TokyoR 第36回LT Rで部分空間法

• 𝑖番目のクラスに属する入力ベクトルをクラス 𝑖の部分空間に正射影し

たときの長さの期待値がクラス間で同程度になるように、各クラスの部分空間の次元を決める。

• 具体的な方法としては、各部分空間に共通なパラメータ 𝜅を導入し、大きい方から並べた固有値の累積値が 𝜅を超えたときの次元数をその部分空間の次元とする。

各クラスの部分空間の次元を決める

• クラス 0の固有値を大きい順にプロットしたもの

• データのバラつきのほとんどは低次元空間に収まっていることが分かる

Page 12: TokyoR 第36回LT Rで部分空間法

こうなった。。。

クラス 次元数

0 2

1 784

2 8

3 8

4 58

5 77

6 9

7 31

8 8

9 27

• クラス 1は全次元足し合わせても 𝜅に達せず

• データ、バラついて無さ過ぎ…

Page 13: TokyoR 第36回LT Rで部分空間法

• 識別規則は、入力ベクトル 𝒙を各クラスの部分空間に射影し、射影後のベクトルの長さが一番長いクラスに所属すると判定するというもの。

• 射影後のベクトルの長さは、クラス 𝑖の射影行列𝑷𝑖 = 𝑗=1𝑑𝑖 𝒖𝑖𝑗𝒖𝑖𝑗

𝑇を

使用して 𝒙𝑇𝑷𝑖𝒙となる。

• 𝑑𝑖:クラス 𝑖の部分空間の次元

• 𝒖𝑖𝑗:クラス 𝑖の部分空間の𝑗番目の固有ベクトル

• 識別クラス= argmax𝑖 𝒙𝑇𝑷𝑖𝒙 𝑖 = 0,⋯ , 9

テストデータの識別をしてみる

Page 14: TokyoR 第36回LT Rで部分空間法

すいません、ここで時間切れです。。。

Page 15: TokyoR 第36回LT Rで部分空間法

ご清聴ありがとうございました。