Python libsvm:TypeError:\uu init\uuu()得到意外的关键字参数“kernel\u type”

2024-04-28 19:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图执行在https://stackoverflow.com/a/4215056给出的libsvm示例,但得到了标题中提到的error 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'

Tags: thehttpscom示例modelparameterparamtype
2条回答

我对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预测在其他“位置”返回的内容的更多信息。

特别是,从“svmutil.py”中提取的svm U列的选项有:

"""
...
'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)
"""

以上代码不适用于libsvm版本3.16(最新版本)。请改为使用以下代码。但是,在开始之前,请确保项目工作文件夹中有这些文件-“libsvm.dll”、“svm.py”&;svmutil.py”。例如:c:\我的项目\ python_libsvm_练习。

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)

请务必阅读“自述”文件。它有很多关于如何使用每一个函数的例子。你可以在这里下载libsvm的最新版本http://goo.gl/YtCU

相关问题 更多 >