LoginSignup
2
1

More than 5 years have passed since last update.

MatlabでlibSVM (&libnlinear) を導入,fisher data に適用する

Last updated at Posted at 2016-10-14

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: 交差検定
2
1
0

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
2
1