【问题标题】:Analyse the predicted model of libsvm in python分析python中libsvm的预测模型
【发布时间】:2012-04-21 10:45:34
【问题描述】:

关于在python中使用libsvm的两个问题:

  1. 我如何知道问题是否可行?
  2. 如何获取原始变量(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


【解决方案1】:

libsvm guide 中所述,在线性核 SVM 上对 C 的指数网格运行交叉验证。如果训练集准确率永远无法接近 100%,则意味着线性模型对于数据偏差太大,这反过来意味着线性假设是错误的(数据不是线性可分的)。

顺便说一句。 测试集准确率是对模型泛化能力的真实评价,但它衡量的是偏差和方差的总和,因此不能直接仅用于衡量偏差。训练集和测试集精度之间的差异衡量模型的方差或过度拟合。有关错误分析的更多信息,请参阅此blog post 总结了ml-class 在线课程的实用提示和技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2013-06-02
    • 2013-09-26
    • 2015-11-26
    • 2017-07-08
    • 2015-01-07
    • 2015-02-01
    相关资源
    最近更新 更多