0

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'
4

2 に答える 2

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 を取ります。predict_labels は、x で指定された各入力の予測クラスのリストになります。これにより、ユーザーは 1 行で複数の予測を要求できます。

正確なラベルは、精度情報を返すためにユーザーによって提供されます。ユーザーが正しいラベルを知らない場合は、そこに任意のラベルを付けて、精度の値を無視します。svm_predict によって他の「_」の場所に何が返されるかについての詳細は、libsvm-3.12/python/svmutil.py のソース コードを参照してください。

特に、「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)
"""
于 2012-06-01T19:11:37.177 に答える
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からダウンロードできます。

于 2013-02-17T23:52:14.407 に答える