1.ここからLIBSVMのzipファイルもしくはtar.gzファイルをダウンロードし適当なディレクトリに解凍。(最新版3.1)
2.解凍したフォルダに移動し、makeコマンド実行。以下のファイルができるはず。
svm.o
svm-train.exe
svm-predict.exe
svm-scale.exe
3.解凍したフォルダの中のpythonフォルダに移動し、makeコマンド実行。以下のファイルができるはず。
libsvm.so.2
使用例
適当に学習させてみる.
svmtest.py
from svm import *
from svmutil import *
prob = svm_problem([1,-1], [[1,0,1], [-1,0,-1]]) #訓練データ
param = svm_parameter('-t 1 -c 3') #SVMのパラメータ設定
m = svm_train(prob, param) #学習
#新しいクラスに対する予測
p_labels, p_acc, p_vals = svm_predict([1,-1], [[2,1,2],[-3,-2,-10]], m)
print p_labels #予測結果
実行.
from svmutil import *
prob = svm_problem([1,-1], [[1,0,1], [-1,0,-1]]) #訓練データ
param = svm_parameter('-t 1 -c 3') #SVMのパラメータ設定
m = svm_train(prob, param) #学習
#新しいクラスに対する予測
p_labels, p_acc, p_vals = svm_predict([1,-1], [[2,1,2],[-3,-2,-10]], m)
print p_labels #予測結果
>>> python svmtest.py
*
optimization finished, #iter = 1
nu = 0.166667
obj = -0.500000, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 2
Accuracy = 100% (2/2) (classification)
[1.0, -1.0]
*
optimization finished, #iter = 1
nu = 0.166667
obj = -0.500000, rho = 0.000000
nSV = 2, nBSV = 0
Total nSV = 2
Accuracy = 100% (2/2) (classification)
[1.0, -1.0]
パラメタの設定
オプション | 説明 | デフォルト値 |
---|---|---|
-s | SVMの種類.以下を設定. 0 -- C-SVC 1 -- nu-SVC 2 -- one-class SVM 3 -- epsilon-SVR 4 -- nu-SVR |
0 |
-t | カーネルの種類.以下を設定. 0 -- 線形カーネル(ただの内積): K(u,v) = uTv 1 -- 多項式カーネル: K(u,v) = (&gamma uTv + r)d 2 -- 動径基底関数カーネル: K(u,v) = exp(-&gamma |u-v|2) 3 -- シグモイドカーネル: K(u,v) = tanh(&gamma uTv + r) 4 -- training_set_fileに記述したカーネル |
2 |
-d | 多項式カーネルのパラメタd. | 3 |
-g | 多項式,動径基底関数,シグモイドカーネルのパラメタ&gamma. | 1/n n:特徴ベクトルの次元 |
-r | 多項式,シグモイドカーネルのパラメタr. | 0 |
-c | C-SVC,epsilon-SVR,nu-SVRで使用するパラメタC. | 1 |
-n | nu-SVC,one-class SVM,nu-SVRで使用するパラメタnu. | 0.5 |
-p | epsilon-SVRのパラメタ&epsilon. | 0.1 |
-m | 使用キャッシュサイズ.単位はMB. | 100 |
-e | 終了基準. | 0.001 |
-h | shrinking heuristicsを使う場合は1,使わない場合は0. | 1 |
-b | 確率推定付きのSVC/SVRモデルを作成する場合は1,しない場合は0. | 0 |
-wi | C-SVCにおけるクラスiのパラメタCの重み.(weight*C) | 1 |
-v | n-分割交差検定(n-fold cross validation)モード. | - |
-q | quiet mode (no outputs) | - |