O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

はじパタ8章 svm

19.674 visualizações

Publicada em

  • Seja o primeiro a comentar

はじパタ8章 svm

  1. 1. はじめてのパターン認識 第8章 「サポートベクトルマシーン」 後半  2013/11/26 @リクルート 2013年11月26日火曜日
  2. 2. あんた誰? 名前            伊藤 徹郎 (@tetsuroito) 所属 株式会社ALBERT データ分析部 好きなもの サッカー、スキー、オレオ! 2013年11月26日火曜日
  3. 3. アジェンダ 1、動径基底カーネル(RBFカーネル) 2、ν-サポートベクトルマシーン 3、1クラスサポートベクトルマシーン 2013年11月26日火曜日
  4. 4. ちょっとSVMの復習 SVMは下記のように、分類したい識別境界を求めるのでしたね。 ! 識 別境界:! T x + b = 0 " !:識別境界の係数ベクトル(学習データから求める) " x:学習データ(d次元の特徴変数!データ数N→d!Nの 列) " b:バイアス項(学習データから求める) ! t = +1 t = -1 2013年11月26日火曜日 線形識別関数 ! Tx + b = 0
  5. 5. ちょっとSVMの復習 制約条件付きの凸計画問題を解く場合、ラグランジュの未定乗数法を用いる SVMの場合は制約条件が不等式となる 主問題 評価関数(最小化):Lp(ω) = ½・ωTω ←マージンの最小化 不等式制約条件:ti(ωTxi+b) ≧ 1 ←判別 ラグランジュ関数(これで制約付き凸計画を解く) N 1 T ~ L p (# , b, $ ) = # # " ! $ i (ti (# T xi + b )" 1) 2 i =1 αiはラグランジュ未定定数 α=(α1,・・・, αN) 2013年11月26日火曜日
  6. 6. ちょっとSVMの復習 ! L d (!)を最 " L p (#)を最 化する問題を「双対問題」と呼ぶ" 化する#を求めるほうが主問題! " 双対問題で対象とするラグランジュ関数 N 1 N N 評価関数 Ld (# ) = ! "" # i ti xi# j t j x j + " # i 2 i =1 j =1 i =1 (最 化) 1 T = # 1 ! # H# 2 #Tt = 0 T 制約条件 T H = ( H ij = ti t j xi x j ) t = (t1 , , , t N )T 2013年11月26日火曜日 #からじゃなく、 !から鞍点を探す
  7. 7. ちょっとカーネルトリックの復習 ! 線 形分離が上 くできない場合でも、 線形変換で 元空間に写像すれば上 く分離できる場合がある 次 !  線形写像 " d次元の学習データx∈R d 線形変換!でM次元空間に写像 " !(x)=(! 0 (x)=1, ! 1 (x),…,! M バイアス項 2013年11月26日火曜日 写像結果 (x)) T 識別境界 線形変換! !0
  8. 8. 動径基底カーネル(RBFカーネル) 多項式カーネルとは別にもう1つ内積で表すカーネルがあります。 σ:カーネル関数の広がりを制御するパラメータ N N T h (! ( x )) = ! 0 " ( x ) = !! i ti" T ( xi ) ! ( x ) = !! i ti K ( xi , x ) i=1 i=1 ココ! σが大きいとき:入力データxから遠く離れている広範囲のサポートベクトルが関与 σが小さいとき:入力データxの近傍のサポートベクトルのみが関与 2013年11月26日火曜日
  9. 9. ちょっとだけ正規分布の話 正規分布といえば、下記の図がぱっと思い浮かびます。 σを大きくした場合、この正規分布の高さが低くなり横に散らばります。 σを小さくした場合は、山の凸が急になり、分布の裾野が薄くなります。 2013年11月26日火曜日
  10. 10. RBFカーネルの特徴 RBFカーネルの非線形特徴ベクトルは無限次元となるようです。 ただの式展開なので、詳細は教科書見てちょ よく使われるガウシアンカーネルもこのRBFカーネルの一部のようです。 以前、同一種だと思っていましたが、完全一致ではないもよう。 詳しくはわからないので、誰か知ってたら教えてください。 2013年11月26日火曜日
  11. 11. Rでの実行例 library(MASS)内のPima.trでRBFカーネルの識別具合を実行する例が載っている。 WHOがインディアン女性の健康データを取得したものらしい。 > Pima.tr npreg glu bp skin bmi ped age type 1 5 86 68 28 30.2 0.364 24 No 2 7 195 70 33 25.1 0.163 55 Yes 3 5 77 82 41 35.8 0.156 35 No 4 0 165 76 43 47.9 0.259 26 No 5 0 107 60 25 26.4 0.133 23 No 6 5 97 76 27 35.6 0.378 52 Yes 7 3 83 58 31 34.3 0.336 25 No 8 1 193 50 16 25.9 0.655 24 No 9 3 142 80 15 32.4 0.200 63 No 10 2 128 78 37 43.3 1.224 31 Yes 2013年11月26日火曜日 このtypeをglu、bmiを用いて kernlabパッケージのksvm関数を用いて、 RBFカーネルのσとCのパラメータを 調整して、その識別精度を検証。
  12. 12. Rでの実行例 x1_svm1 <- ksvm(type~glu+bmi,data=x,kernel="rbfdot",kpar=list(sigma=0.2),C=1) ※実行コードがないので、とりあえず加法してみた。 ※カーネル選択はRBF ※σとCは引数で調節 2013年11月26日火曜日
  13. 13. Νーサポートベクトルマシーン ソフトマージン識別機では、誤識別数の上限を抑えるためにCという定数パラメー タを使っていました。 N N N 1 T ~ L p ($ , b, % , # , µ ) = $ $ + C ! # i " ! % i (ti ($ T xi + b )" 1 + # i )" ! µi# i 2 i =1 i =1 i =1 しかし、母集団からの標本が変わると誤識別数も変化してしまいます。 学習器の複雑さと達成可能な誤識別率には関連性があるので、 そのトレードオフをνというパラメータを介したものがν-SVMです。 ※タイトルのはどうしても小文字で表記できなかったので大文字表記です。 すみません。。 2013年11月26日火曜日
  14. 14. 何を変えたの? CクラスSVMの場合の損失関数は ξi =f +(1- tif (xi)) ν-SVMの場合の損失関数は ξi =f +(ρ- tif (xi)) ρの値を最適化することを考えます。 学習機械は損失を小さくする方にはたらくので、損失関数としては マージンの大きさを決める値ρが小さければ小さいほど損失は小さくなる。 しかし、小さくなりすぎると汎化性能が下がる。 2013年11月26日火曜日
  15. 15. 主問題 先ほどの汎化性能の問題もあり、次のように定式化します。 評価関数(最小化) 不等式制約条件 2013年11月26日火曜日
  16. 16. KKT条件 数式書くの心が折れたんで、P129の(8.36)と(1)∼(8)を参照ください。 (7),(8)式が相補性条件となるので、(8.36)式に代入することで、 次のような双対問題を得る事ができます! 2013年11月26日火曜日
  17. 17. 双対問題 評価関数(最大化) 制約条件 2013年11月26日火曜日
  18. 18. ニューの意味って何 サポートベクトルはai>0となる学習データ サポートベクトルでないデータに対しては、ai=0で、最大値は1/N ×サポートベクトル数 サポート ベクトル νはサポートベクトルの割合の下限を与えていることになります。 2013年11月26日火曜日
  19. 19. ニューの意味って何 また、KKT条件(8)からマージンを超えてξi>0となる場合、μi=0なので KKT条件(3)から、αi=1/Nとなるので、 上限サポート 上限でない ベクトル サポートベクトル =1/N×上限サポートベクトル数+ 上限でない ※ν≧1/N×上限サポートベクトル数 サポートベクトル νはマージン誤り(上限サポートベクトルの割合の上限)を与えている 2013年11月26日火曜日
  20. 20. Rでの実行例2 どうやらν-SVMは先ほどのksvm関数の引数のnuを指定すればできるようだ サポート ベクトルの割合 (上側) 上限 サポートベクトルの割合 (下側) νmax=0.68以上の領域では意味がない。(下限と上限逆転しちゃうから?) 2013年11月26日火曜日
  21. 21. 1クラスサポートベクトルマシン C-SVMやν-SVMは2クラスの識別関数を構成するものだった。 SVMを1クラスの学習に用いて、入力データが そのクラスに入るか入らないかのみを判断する 方法が、One-Class SVM ■主な用途 新規性判断、例外検出、外れ値検出など‥ 2013年11月26日火曜日
  22. 22. やり方は2種類あるらしい 1、ν-SVMを用いてマージン境界の超平面を   用いて、正負を判定する方法 2、サポートベクトル領域記述法   正例を超球で包み、その半径を最適化 テキストでは1を紹介! 2013年11月26日火曜日
  23. 23. 1クラスSVMの概念図 x Φ(x) ! w ! ○のデータを非線形変換して学習し、識別境界を挟んで原点と反対側に来るように 学習。 ○が正例、×は負例ということになる。 ※すべて正例でも外れ値検出される懸念があるので、注意! 2013年11月26日火曜日
  24. 24. 主問題と双対問題 2013年11月26日火曜日
  25. 25. 識別関数 f(x)=1の時が正例 f(x)=-1の時が外れ値となります。 2013年11月26日火曜日
  26. 26. Rでの実行例3 実はksvm関数の引数設定で、type=”one-svc”と指定するとできるっぽい 実行例では、σ=4、ν=0.01で学習した時の例が出ていますね。 2013年11月26日火曜日
  27. 27. 1クラスSVMをRでやってみる ちょっと途中で息切れしちゃったのですが、1クラスSVM試してみたので、 勘弁してください。 x,y座標に乱数を100個 RBFカーネルを選択 ν=0.01 σ=0.1 赤:正例 青:負例 2013年11月26日火曜日
  28. 28. 1クラスSVMをRでやってみる ちょっと途中で息切れしちゃったのですが、1クラスSVM試してみたので、 勘弁してください。 x,y座標に乱数を10000個 RBFカーネルを選択 ν=0.3 σ=0.1 赤:正例 青:負例 2013年11月26日火曜日
  29. 29. なんかちゃんとできてるっぽい! 2013年11月26日火曜日
  30. 30. コードも載せとくね x <- rnorm(100) y <- rnorm(100) data <- data.frame(type=1, x, y) library(kernlab) data.ksvm<- ksvm(type~.,data=data,type="one-svc",kernel="rbfdot",kpar=list (sigma=0.1),nu=0.01,cross=10) data.ksvm.predict <- predict(data.ksvm) data.ksvm.predict <- ifelse(data.ksvm.predict==TRUE, 1, 2) data.result <- cbind(data,data.ksvm.predict) plot(data.result[,2:3], pch=21, bg=c("red","blue")[data.result$data.ksvm.predict]) 1万はちょっと時間かかったから、前者の例です 2013年11月26日火曜日
  31. 31. あ、そういえば! 2013年11月26日火曜日
  32. 32. Japan.Rでトークします マサカリ投げないでくだしあ 2013年11月26日火曜日
  33. 33. おわり ご清聴ありがとうございました! 2013年11月26日火曜日

×