SVMとは
他にいろんな人がちゃんと書いてるのでそこ読んだ方が良い.分かるパターン認識とかも良い.
導入
windows
公式サイト または github
から引っ張ってきてパスを通す.
>> addpath(genpath('path¥to¥libsvm'))
てかんじに startup.m に書くと良い.hogeはlibsvmのおいてる場所.windowsの場合はビルド済バイナリが既に入ってますのでもうこのまま使える.
Mac OSXなどunix系
Matlabのシェル内で
>> cd('path¥to¥libsvm¥matlab')
>> make
して mex コンパイルすればよかったはずなのに
>> mex -setup
エラー: mex
サポートされているコンパイラまたは SDK が見つかりません。オプションについては、
http://www.mathworks.com/support/compilers/R2015a/maci64.html を参照してください。
とmexのセットアップ段階でこけた.xcode 7.0 以上に私のmatlab2015aが対応していないせいらしい.公式のFAQ にあるように xcode7.0用対応のファイルと設定ファイルを入れ替えてやったらちゃんとmakeできた.
使用法
フィッシャーのアヤメデータを用いてテストする.オプションを使えば勝手に交差検定してくれるけどあえて手動でtest用データと学習用dataを分けた.
load('fisheriris.mat')
labels = unique(species);
specIdx = zeros(150,1);
for i = 1:length(labels)
specIdx(find(strcmp(species, labels{i})))=i; % クラスを数字にする
end
randsort = randperm(150);
test = randsort(1:15); % テストデータのインデックス
trn = randsort(16:end); % 学習データのインデックス
% - test 5 featuress
% for i = 5:100
% meas(:,i) = meas(:,1)+randn(150,1);
% end
testDS = meas(test, :);
trnDS = meas(trn, :);
学習と予測は二行でできる.
model_svm = svmtrain(specIdx(trn), trnDS, '-t 0')
svmpredict(specIdx(test), testDS, model_svm);
- svmtrain(ラベル,データ,オプション)
- svmpredict(ラベル,データ,モデル,オプション)
という感じ.以上導入とテストについて簡単にまとめてみた.元気があったらそのうち可視化や次元圧縮について書きたい.
よく使うオプション
- t: カーネル
- q: 出力停止
- v: 交差検定