簡體   English   中英

libsvm的准確性不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM