Pythonでのlibsvmの使用に関する2つの質問:
- 問題が実行可能かどうかをどのように知ることができますか?
- 主変数(wとオフセットb)を取得するにはどうすればよいですか?
2D空間での4つのトレーニングポイント(*で示されている)を考慮した簡単な例を使用します。
*----*
| |
| |
*----*
C_SVC定式化と線形カーネルを使用してSVMをトレーニングし、4つのポイントを2つのラベル[-1、+1]に分類します。
たとえば、このようにトレーニングポイントを設定すると、分離超平面が見つかるはずです。
{-1}----{+1}
| |
| |
{-1}----{+1}
しかし、この非線形の問題では、分離超平面を見つけることができないはずです(線形カーネルのため)。
{+1}----{-1}
| |
| |
{-1}----{+1}
そして、このケースを検出できるようにしたいと思います。
2番目の例のサンプルコード:
from svmutil import *
import numpy as np
y = [1, -1, 1, -1]
x = [{1:-1, 2 :1}, {1:-1, 2:-1}, {1:1, 2:-1}, {1:1, 2:1}]
prob = svm_problem(y, x)
param = svm_parameter()
param.kernel_type = LINEAR
param.C = 10
m = svm_train(prob, param)
サンプル出力:
optimization finished, #iter = 21
nu = 1.000000
obj = -40.000000, rho = 0.000000
nSV = 4, nBSV = 4
Total nSV = 4