LoginSignup
7

More than 5 years have passed since last update.

ググったサイトを見ながら、RでSVMをやってみた。眼鏡の人とそれ以外の分類

Last updated at Posted at 2016-06-22

Background

探し物をしていたら、SVMのサイトに行き着いて、ちょうどソースが公開してあったので、試してみた。
眼鏡かけている人と眼鏡かけていない人の分類だった。

Summary

  1. 見つけたサイトを真似してR言語でSVMを使った分類してみた。(e1071)
  2. R言語の画像処理ライブラリ(biOps)が古くなっていてCRANから外れていた。(でも動かせた)
  3. オリジナルのソースの一部に不具合?があった。でも、あれこれやったら直った。
  4. 画像の集め方は、Windows版のフリーソフトが簡単

感想
- 正解率 74% 画像の選び方など、あまり丁寧にやっていないけど、簡単なプログラムで、これだけできるってすごい。
- R言語でちゃんとしたスクリプトを動かすのは初めてだったので、いろいろ遠回りして勉強にはなった。
- 有名なライブラリがCRANから外れている。Rの書籍などでも使われているので、困る初学者が多そう。
- 画像の収集、以前はGoogleのAPIとかで自由にできたみたいだけど、今はImageSpider(Windows版のフリーソフトが簡単)
- R、遅い。でもライブラリやドキュメントは豊富。使い道次第。

References...1つだけ読むなら
1. http://www.slideshare.net/tojimat/tokyor-41?next_slideshow=1

Details

RとRStudioをインストール。

ソースをダウンロード。Reference 2 (Github)からソースをダウンロード。Rのファイル一つだけなので、直接Rstudioに貼り付けた。

環境は以下
R version 3.3.0 (2016-05-03) -- "Supposedly Educational"
Copyright (C) 2016 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin13.4.0 (64-bit)

RStudio
Version 0.99.902 – © 2009-2016 RStudio, Inc.

ライブラリのインストール。

ライブラリが入っていなかったので、インストール。
e1071はCRANからインストールできたが、biOpsはメンテナンスされていないようで、CRANから外されていた。archiveにはtarballがあったので、それをインストール
(結局)Rのバージョンが上がって、古いライブラリが使えなくなったようだ。

画像用ディレクトリ作成

Reference 1に書いてあったが、画像ファイルがないので、そのままでは動かない。画像だけじゃなく、ディレクトリ構造もわからない。ソースを見ながらmkdir
ディレクトリ構造。

.
├── bin
├── data
│   ├── glasses
│   ├── no_glasses
│   ├── sample_glasses
│   └── sample_no_glasses
└── glasses_classifier.R

とにかく動かしてみる(その1)

> library(e1071)
警告メッセージ: 
R graphics engine version 11 is not supported by this version of RStudio. The Plots tab will be disabled until a newer version of RStudio is installed. 

対応方法はわからないので、気にせず、そのまま進む。

とにかく動かしてみる(その2)

‘cross’ must not exceed sampling size!
サンプル数が10以上ないとエラーになるらしい。
http://www.datasciencecentral.com/profiles/blogs/svm-in-practice

画像を集めてきて、先に進む。

ImageSpiderというWindows版フリーソフトがオススメ。
wgetとか、GoogleやBingのAPIとかより簡単。
http://www.vector.co.jp/soft/winnt/net/se425690.html

とにかく動かしてみる(その3)

エラーが出た。

TuneSVM(dataset, kRoughGammaRange, kRoughCostRange)
svm.default(x, y, scale = scale, ..., na.action = na.action) でエラー:
外部関数の呼び出し (引数 10) 中に NA/NaN/Inf があります
追加情報: 50 件以上の警告がありました (最初の 50 個の警告を見るには warnings() を使って下さい)

いろいろ探し回った結果、元のスクリプトの一部に不足があったみたい。
作者さんのところでは動いていたのかもしれないけど、自分の環境では動かなかった。

オリジナル: tunecontrol = tune.control(sampling="cross", nrow(dataset))
修正     : tunecontrol = tune.control(sampling="cross", cross = nrow(dataset))

Githubにライセンス表示がなかったので、問題の箇所だけ。
https://github.com/Salinger/glasses_classifier/blob/master/glasses_classifier.R

結果

パラメータ 正解率(%)
デフォルト 72.9
グリッドサーチ(粗) 74.9
グリッドサーチ(細) 73.6

画像の選び方など、あまり綺麗に統一していないのも一因かな?
簡単なプログラムで、これだけできるってすごい。

References

  1. http://www.slideshare.net/tojimat/tokyor-41?next_slideshow=1
  2. https://github.com/Salinger/glasses_classifier/blob/master/glasses_classifier.R
  3. https://cran.r-project.org/web/packages/e1071/index.html

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7