为什么predict_label +1即使它应该是-1?在MATLAB中使用LIBSVM

时间:2014-01-27 13:48:47

标签: matlab libsvm labels pca

我提取了培训和测试数据的主要组成部分 'trainingdata.train'具有来自+1(面部1)和-1(所有其他面部)标签的特征值。 'testdata.train'具有来自face 2的特征值而没有标签,因为我希望SVM预测其标签。 LIBSVM给出的“predict_label”是+1,即使它应该是-1。

[training_label_matrix, training_instance_matrix] = libsvmread('trainingdata.train');
[testing_label_matrix, testing_instance_matrix] = libsvmread('testdata.train');
model = svmtrain(training_label_matrix, training_instance_matrix);
[predicted_label] = svmpredict(testing_label_matrix, testing_instance_matrix, model);

请指出我做错了什么。

2 个答案:

答案 0 :(得分:1)

使用[predict_label, accuracy, prob_values] = svmpredict(testLabel, testData, model, '-b 1');来观察准确性。

testLabel是包含测试数据“正确”标签的向量。给出此参数以计算accuracy。在测试数据标签未知的实际情况下,只需使用任意随机值即可获得predict_label而无需计算accuracy

此外,虽然不是必需的,但您最好在svmtrain中指定选项,请查看their page了解详情。

答案 1 :(得分:0)

@Lennon:代码应该这样吗?

[training_label_matrix, training_instance_matrix] = libsvmread('trainingdata.train');
[testing_label_matrix, testing_instance_matrix] = libsvmread('testdata.train');
model = svmtrain(training_label_matrix, training_instance_matrix);
[predict_label, accuracy, prob_values] = svmpredict(ones(size(testData,1),1), testing_instance_matrix, model, '-b 1');