我提取了训练和测试数据的主要组成部分。'trainingdata.train'具有来自+1(面1)和-1(所有其他面)标签的特征值。“ testdata.train”具有面2的特征值,没有标签,因为我希望SVM预测其标签。LIBSVM给出的“ predicted_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);
请向我指出我做错了。
使用[predict_label, accuracy, prob_values] = svmpredict(testLabel, testData, model, '-b 1');
观察精度。
testLabel
是包含测试数据的“正确”标签的向量。给出此参数是为了计算accuracy
。在测试数据标签未知的真实情况下,只需使用任何随机值即可获取predict_label
,而无需计算accuracy
。
此外,尽管不是必需的,但最好在svmtrain
中指定选项,请检查their page了解更多详细信息。
@@ 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');