【问题标题】:Python libsvm: TypeError: __init__() got an unexpected keyword argument 'kernel_type'Python libsvm: TypeError: __init__() got an unexpected keyword argument 'kernel_type'
【发布时间】:2012-05-07 19:17:42
【问题描述】:

我试图执行 https://stackoverflow.com/a/4215056 给出的 libsvm 示例,但我收到标题中提到的错误 TypeError。

from svm import *
prob = svm_problem([1,-1],[[1,0,1],[-1,0,-1]])
param = svm_parameter(kernel_type = LINEAR, C = 1)
## training  the model
m = svm_model(prob, param)
#testing the model
m.predict([1, 1, 1])

Error:
    param = svm_parameter(kernel_type = LINEAR, C = 1)
TypeError: __init__() got an unexpected keyword argument 'kernel_type'

【问题讨论】:

    标签: python typeerror libsvm


    【解决方案1】:

    我在使用 libsvm-3.12 时遇到了这个问题(我假设您的问题是由类似的原因引起的)。查看 libsvm-3.12/python 文件夹中 svm.py 模块中的方法“svm_parameter”,该方法期望参数作为选项字符串传递,例如'-t 2 -v 5 -c 1'。

    我发现这样做更好:

    from svmutil import *
    # Specify training set
    prob = svm_problem([1,-1],[[1,0,1],[-1,0,-1]])
    # Train the model
    m = svm_train(prob, '-t 0 -c 1')
    # Make a prediction
    predicted_labels, _, _ = svm_predict([-1],[[1,1,1]],m)
    # Predicted label for input [1,1,1] is predicted_labels[0]
    print "Predicted value: " + str(predicted_labels[0])
    

    一点解释:svm_predict(y,x,m) 除了模型 m 之外,还需要一个“正确标签”列表 y 和一个输入数据列表 x。然后,predicted_labels 将是 x 中给定的每个输入的预测类列表。这允许用户在一行中请求多个预测。

    用户提供正确的标签以返回准确性信息。如果用户不知道正确的标签,那么只需将任意标签放在那里并忽略准确度值。查看 libsvm-3.12/python/svmutil.py 中的源代码,了解有关 svm_predict 在其他 '_' 位置返回的内容的更多信息。

    特别是,从 'svmutil.py' 中获取的 svm_train 选项是:

    """
    ...
    'options':
        -s svm_type : set type of SVM (default 0)
            0 -- C-SVC
            1 -- nu-SVC
            2 -- one-class SVM
            3 -- epsilon-SVR
            4 -- nu-SVR
        -t kernel_type : set type of kernel function (default 2)
            0 -- linear: u'*v
            1 -- polynomial: (gamma*u'*v + coef0)^degree
            2 -- radial basis function: exp(-gamma*|u-v|^2)
            3 -- sigmoid: tanh(gamma*u'*v + coef0)
            4 -- precomputed kernel (kernel values in training_set_file)
        -d degree : set degree in kernel function (default 3)
        -g gamma : set gamma in kernel function (default 1/num_features)
        -r coef0 : set coef0 in kernel function (default 0)
        -c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)
        -n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)
        -p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)
        -m cachesize : set cache memory size in MB (default 100)
        -e epsilon : set tolerance of termination criterion (default 0.001)
        -h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)
        -b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)
        -wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)
        -v n: n-fold cross validation mode
        -q : quiet mode (no outputs)
    """
    

    【讨论】:

    • Get NameError: name 'svm_train' is not defined
    • svm_trainlibsvm-3.12\python\svmutil.py 中定义。您是否包含 from svmutil import * 并正确设置了 PYTHONPATH?
    【解决方案2】:

    以上代码不适用于 libsvm 版本 3.16(最新版本)。请改用以下代码。但是,在开始之前,请确保您的项目工作文件夹中有这些文件 - 'libsvm.dll'、'svm.py' 和 'svmutil.py'。例如:c:\my project\python_libsvm_exercise。

    from svmutil import *
    m = svm_train([1,-1],[[1,0,1],[-1,0,-1]], '-t 0 -c 10')
    p_labels, p_acc, p_vals = svm_predict([1,-1],[[1,0,1],[-1,0,-1]], m)
    

    请务必阅读“README”文件。它有大量关于如何使用每个功能的示例。你可以在这里下载最新版本的 libsvm http://goo.gl/YtCU

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      相关资源
      最近更新 更多