0

I was trying to execute the libsvm example given at https://stackoverflow.com/a/4215056 but I get the error TypeError mentioned in the title.

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'

2 Answers 2

2

I had this problem with libsvm-3.12 (I'm assuming your problem is caused by something similar). Looking at the method 'svm_parameter' in svm.py module in the libsvm-3.12/python folder, the method expects the arguments to be passed as an option string, e.g. '-t 2 -v 5 -c 1'.

I found it better to do:

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])

A little explanation: svm_predict(y,x,m) takes a list y of 'correct labels' and a list x of input data in addition to the model m. predicted_labels will then be a list of the predicted classes for each input given in x. This allows the user to request multiple predictions in a single line.

The correct labels are provided by the user for returning accuracy information. If the user doesn't know the correct labels then just put an arbitrary label there and ignore the accuracy values. Have a look at the source code in libsvm-3.12/python/svmutil.py for more information on what is returned in the other '_' places by svm_predict.

In particular, the options for svm_train taken from 'svmutil.py' are:

"""
...
'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)
"""
Sign up to request clarification or add additional context in comments.

2 Comments

Get NameError: name 'svm_train' is not defined
svm_train is defined in libsvm-3.12\python\svmutil.py. Did you include from svmutil import * and set your PYTHONPATH correctly?
0

The above code doesn't work for libsvm version 3.16 (the latest one). Use the following code instead. However, before you get started, make sure you have these files - 'libsvm.dll', 'svm.py' & 'svmutil.py' - in your project working folder. For eg: 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)

Be sure to read the 'README' file. It has ample of examples on how to use each of the functions. you can download the latest version of libsvm here http://www.csie.ntu.edu.tw/~cjlin/libsvm/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.