【发布时间】:2012-04-21 10:45:34
【问题描述】:
关于在python中使用libsvm的两个问题:
- 我如何知道问题是否可行?
- 如何获取原始变量(w 和偏移量 b)?
我使用一个简单的例子,考虑 2D 空间中的 4 个训练点(用 * 表示):
*----*
| |
| |
*----*
我使用 C_SVC 公式和线性内核训练 SVM,我将 4 个点分类为两个标签 [-1, +1]。
例如,当我这样设置训练点时,它应该找到一个分离的超平面。
{-1}----{+1}
| |
| |
{-1}----{+1}
但是对于这个非线性问题,它应该找不到分离的超平面(因为线性核)。
{+1}----{-1}
| |
| |
{-1}----{+1}
我希望能够检测到这种情况。
第二个例子的示例代码:
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
【问题讨论】:
-
不确定这是否有帮助 - 在我使用的 Matlab 中找到权重向量
(m.sv_coef' * full(m.SVs))
标签: python machine-learning libsvm