分析python中libsvm的预测模型

时间:2012-04-08 21:44:44

标签: python machine-learning libsvm

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

  1. 我怎么知道问题是否可行?
  2. 如何获得原始变量(w和偏移量b)?
  3. 我使用一个简单的例子,考虑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
    

1 个答案:

答案 0 :(得分:2)

运行C的指数网格的交叉验证,如线性内核SVM上libsvm guide中所述。如果训练集精度永远不会接近100%,则意味着数据的线性模型太偏向,这反过来意味着线性假设为假(数据不是线性可分的。)

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