More Related Content Similar to Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築 Similar to Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築 (20) Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築14. 未知の は と どちらに分類される?
14
17. サポートベクターマシン (SVM) とは?
• 教師あり学習 (入力例を与える)
• さっきの例では & が学習データ
未知の を分類する
• マージン最大化学習を行う2値分類器
• 分離超平面を決定する
• 線形分類器 (真っ直ぐなものしか切れない)
だったのだが…
17
23. カーネル関数の例
• 線形
(Linear)
• 多項式
(Polynomial)
• RBF: “Gaussian”
(Radial Basis Function)
• シグモイド(Sigmoid)
K( ix , jx ) = i
T
x jx
K( ix , jx ) = exp(−γ i
T
x − jx
2
)
K( ix , jx ) = (γ i
T
x jx +r)d
(γ > 0)
(γ > 0)
K( ix , jx ) = tanh(γ i
T
x jx +r)
基本的に普段使うのは 線形カーネル と、
非線形の RBFカーネル ぐらい。RBF の名前だけは覚えておこう。
23
26. R で使える SVM のライブラリ
• e1071
• Libsvm のアルゴリズム(Chang and Lin, 2001)を
利用することができる。視覚化やパラメーター調整などを
行なえる(Dimitriadou et al., 2005)。
• kernlab
• カーネル法に基づく SVM アルゴリズムを利用できる。
そのほかに、libsvm や bsvm (Hsu and Lin, 2002) を
改良した柔軟性のある SVM を提供している。
• klaR
• SVMlight アルゴリズムを利用できる。
26
30. 1. データの整形
• 学習用データ
• 「素性ベクトル」 と 「正解ラベル」 のペア
• 本番用のデータ
• 学習用に使用した素性ベクトルと
同じ要素数からなる素性ベクトル
v1: [ [0.50, 0.33, -0.21],
[0.12, 0.98, 1.34],
… ]
l: [ 1,
-1,
… ]
v2: [ [0.23, 0.55, -0.19],
[0.10, 0.24, 0.78],
… ]
O: [ 1,
-1,
… ]
システムの出力
30
31. 2. 素性の選択(1)
• 数値データ
• そのまま使用 [10.0, 2.5, 6.4, -8.2]
• 範囲ごとに分割 [10, 0, 5, -10]
• バイナリ化 [1, 1, 1, 0]
• テキストデータ
• 単語の出現回数 (n-gram)
• 品詞情報 等を数値化
• 画像・音声データ
• 元データをそのまま行列からベクトルに
• フィルタリング
• 圧縮して単純化
• フーリエ変換・ウェーブレット変換 等
31
32. 2. 素性の選択(2)
• 次元の呪い (curse of dimensionality)
• 超高次元になるとモデルが複雑に
• 学習データが不足する。
• 球面集中現象
• 次元の増加に伴って各データ間の距離が
互いに等しくなる。
• まとめられるものはまとめる ⇒ 特徴選択・次元削減
Ex. 単語の出現回数 ⇒ 類語をまとめてカウント
32
36. 5.1 交差検定
• 訓練データとテストデータの分割方法
1 2 3 4 5 全データをk個に分割
1
2 3 4 5
テストデータ
訓練データ 1 2 3 4
5
〜
• k 回試行してその平均を利用
• テストデータは常に未知のデータ
⇒ 過剰適応 (Over fitting) を防げる。
テストデータ
訓練データ
36
41. 用意したデータ
• データ数
• 学習 & チューニング用データ
• 眼鏡っ娘画像: 75枚 他: 75枚
計150枚
• テスト用データ (作成した分類器の動作確認用)
• 眼鏡っ娘画像: 3枚 他: 3枚
計 6枚
• 内容
• ネットで拾ったアニメのキャプ画。
• 主に人物単体写ってるもの
• 基本顔がはっきりとわかるもの。
41
42. biOps ライブラリ で画像を加工
42
1. 元画像 2. グレースケール変換
3. エッジ検出 4. ダウンサイジング (48x27)
要素 (次元) 数 1296 の 素性ベクトル
(眼鏡:75 個 Not: 75 個 計150個)
5.
0〜1に
なるよう
正規化
imgRGB2Grey()
imgCanny()
imgAverageShrink()
vec / 255
43. 動作確認
• SVMは R の e1071 ライブラリを利用。
• RBFカーネル & デフォルトパラメータで試行。
• 交差検定は 分割数 = 学習データ数
とする Leave-one-out 法 を用いる。
• 今回の場合149個学習させて残り1個を分類
結果やいかに?
43
49. 参考文献
・SVM実践ガイド (A Practical Guide to Support Vector Classification)
http://d.hatena.ne.jp/sleepy_yoshi/20120624/p1
・カーネル法
http://www.eb.waseda.ac.jp/murata/research/kernel
・TAKASHI ISHIDA HomePage SVM
http://www.bi.a.u-tokyo.ac.jp/~tak/svm.html
・バイオインフォマティクス Rで行うSVM解析, e1071, kernlab, klaR パッケージの使い方
http://bi.biopapyrus.net/compute/r-svm.html
・眼鏡っ娘分類器 サンプルコード
(学習データを含んでいないので、そのまま実行はできない)
https://github.com/Salinger/glasses_classifier/blob/master/glasses_classifier.R
49
53. カーネル関数の決定(3)
1. 事例数 << 素性数 の場合
• 素性が高次元なので写像する必要がない
• 線形カーネルを使うべき
2. 事例数 >> 素性数 の場合
• 非線形カーネルを利用して高次元に写像すべき
3. 事例数も素性数も大きい 場合
• 学習に時間がかかる。LIBSVMが苦手なケース
• 線形カーネル & LIBLINEARの利用を検討
53