python调用libSVM异常,svm_save_model(modelName,model)。总说第一个参数类型错误?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python调用libSVM异常,svm_save_model(modelName,model)。总说第一个参数类型错误?相关的知识,希望对你有一定的参考价值。

libsvm.svm_save_model(model_file_name, model)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type 为什么?

参考技术A 可以看看python文件夹下面的README。第一个参数是:保存model的文件名,字符串类型。第二个参数就是svm_train返回的model。 README里面有详细的例子。按照你的错误, model_file_name是字符串类型吗?检查一下就行吧

LibSVM 预测不工作

【中文标题】LibSVM 预测不工作【英文标题】:LibSVM Predict Not working 【发布时间】:2017-07-08 03:06:44 【问题描述】:

我已经在 libsvm 的 python 实用程序中编写了我的分类器,到目前为止它运行良好。这是我如何调用 Python API 的示例:

print svmutil.svm_predict([2], [f.flatten().tolist()], libsvm_model, '-b 1')

其中 f 是 (1024,1) 向量。

我已保存模型,并使用 C++ API 加载它。但是,当我尝试加载和预测相同的向量时,它给了我错误的结果。

cv::Mat oneCol = fcMat.row(0);
svm_node *x = (struct svm_node *) malloc(1025*sizeof(struct svm_node));
for(int i=0; i<1024; i++)
    x[i].index = i;
    x[i].value = (double)oneCol.at<float>(i);

x[1024].index = -1;


double *prob_estimates=NULL;
prob_estimates = (double *) malloc(svmModel->nr_class*sizeof(double));

double retVal = svm_predict_probability(svmModel, x, prob_estimates);
cout << retVal << endl;

for(int j=0;j<svmModel->nr_class;j++)
    cout << prob_estimates[j] << endl;

在这里,我尝试从 OpenCV 对象中加载一个向量。然而,预测的模型是错误的。这里有什么问题吗?

【问题讨论】:

【参考方案1】:
for(int i=0; i<1024; i++)
    x[i].index = i+1;
    x[i].value = (double)oneCol.at<float>(i);

在 LibSVM 中,索引从 1 开始。谁知道 :(

【讨论】:

以上是关于python调用libSVM异常,svm_save_model(modelName,model)。总说第一个参数类型错误?的主要内容,如果未能解决你的问题,请参考以下文章

python调用Libsvm的几种方法

python调用shell命令之三慷慨法

python调用shell命令之三慷慨法

如何在 python 中使用 libSVM 计算精度、召回率和 F 分数

LibSVM 一类分类 nu 参数不是异常值的一小部分吗?

LibSVM 预测不工作