2012-04-27 3 views
0

Я пытался выполнить пример libsvm, указанный в https://stackoverflow.com/a/4215056, но я получил ошибку TypeError, упомянутую в заголовке.Python libsvm: TypeError: __init __() получил неожиданный аргумент ключевого слова 'kernel_type'

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' 

ответ

3

У меня была эта проблема с libsvm-3.12 (я предполагаю, что ваша проблема вызвана чем-то подобным). Рассматривая метод 'svm_parameter' в модуле svm.py в папке libsvm-3.12/python, метод ожидает, что аргументы будут переданы как строка опций, например. '-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 (у, х, м) принимает список у «правильных этикеток» и список х входных данных в дополнении к модель m. Затем предсказываемые_классы будут списком прогнозируемых классов для каждого ввода, заданного в x. Это позволяет пользователю запрашивать несколько прогнозов в одной строке.

Правильные метки предоставлены пользователем для получения информации о точности. Если пользователь не знает правильные метки, тогда просто помещайте там произвольную метку и игнорируйте значения точности. Посмотрите исходный код в libsvm-3.12/python/svmutil.py для получения дополнительной информации о том, что возвращается в других местах '_' svm_predict.

В частности, варианты svm_train взяты из 'svmutil.py' являются:

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

Получить NameError: имя 'svm_train' не определен – Superdooperhero

+0

'svm_train' определяется в' libsvm-3.12 \ питона \ svmutil.py'. Вы включили 'from svmutil import * 'и правильно настроили свой PYTHONPATH? – richardr

0

Приведенный выше код не работает для 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

Смежные вопросы