[英]accuracy of libsvm is not right
我正在做libsvm,如圖所示:
numLabels = max(trainlabels);
model = cell(numLabels,1);
for k=1:numLabels
model{k} = svmtrain(double(trainlabels==k), train_data, '-t 0 -b 1');
end
numTest = size(test_data,1);
prob = zeros(numTest,numLabels);
for k=1:numLabels
[predicted_label, accuracy, prob_estimates] = svmpredict(double(testlabels==k), test_data, model{k}, '-b 1');
fprintf('sum(predicted_label==1) = %i \n', sum(predicted_label==1));
fprintf('sum(testlabels==k) = %i \n', sum(testlabels==k));
cc = model{k}.Label==1;
prob(:,k) = prob_estimates(:,cc); %# probability of class==k
end
%# predict the class with the highest probability
[~,pred] = max(prob,[],2);
acc = sum(pred == testlabels) ./ numel(testlabels); %# accuracy
fprintf('Final accuracy = %f %\n', acc*100);
我的准確度始終高於80%(〜83%),每次迭代的預測標簽總和幾乎為零,最終准確度為11%。 如下所示:
Accuracy = 65% (39/60) (classification)
sum(predicted_label==1) = 17
Accuracy = 83.3333% (50/60) (classification)
sum(predicted_label==1) = 0
Accuracy = 83.3333% (50/60) (classification)
sum(predicted_label==1) = 0
Accuracy = 63.3333% (38/60) (classification)
sum(predicted_label==1) = 16
Accuracy = 83.3333% (50/60) (classification)
sum(predicted_label==1) = 0
Accuracy = 83.3333% (50/60) (classification)
sum(predicted_label==1) = 0
Final accuracy = 11.666667 >>
這是怎么發生的? 我在這里做錯了什么?
我認為您的代碼很好。 准確性低的原因是svm無法在此數據集上很好地工作。
如您所見,在幾個模型中,您的svm只是預測一切都是負面的。 這意味着對陽性標記的預測並不那么自信。 因此,當最終將所有概率組合在一起時,准確性很差。
我建議您使用svm嘗試另一個內核以查看結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.