【问题标题】:testing performance classifier matlab测试性能分类器matlab
【发布时间】:2016-05-20 16:06:32
【问题描述】:

您好,我在 matlab 中训练了一个分类器,我想测试它的准确性。 我发现了很多功能可以做到这一点,但我正在困惑使用什么......

目前:

% train my classifier
svmStruct = fitcsvm(Xtrain,Ytrain,'KernelFunction','linear','Standardize',true);

% predict the output of an unknown input <- this part takes a lot of time
IDX_svm = zeros(size(Xtest,1),1);
for j = 1 : size(Xtest,1)    
    IDX_svm(j) = predict(svmStruct,Xtest(j,:));    
end

%compute performaces
TABLE = confusionmat(Ytest,IDX_svm);
sum_diag = 0;
for j = 1 : size(TABLE,2)
    sum_diag = sum_diag + TABLE(j,j);
end
error_rate = 1-(sum_diag/sum(sum(TABLE,2)));

【问题讨论】:

    标签: matlab testing machine-learning classification supervised-learning


    【解决方案1】:

    准确率被简单地定义为正确预测的标签与测试/验证集中标签总数之间的比率。因此,如果您有测试标签向量(我想是Ytest)和预测标签向量(我想是IDX_svm),而不是使用混淆矩阵,您可以简单地运行

    Accuracy=sum(IDX_svm==Ytest)/length(Ytest)
    

    Accuracy 将在 [0;1] 范围内,您只需将其乘以 100 即可按百分比缩放。

    当然,错误率是根据以下之一定义的:

    • 如果您之前评估过准确度
      • 1-Accuracy 如果 Accuracy 在 [0;1] 范围内
      • 100-Accuracy 如果Accuracy 以百分比形式给出
    • 如果您只想评估错误率
      • 正确预测的标签与测试/验证集中标签总数的比率:ErrorRate=sum(IDX_svm~=Ytest)/length(Ytest)。该值将在 [0;1] 范围内
      • 将上述结果乘以 100 将得出错误率百分比

    这些是标准定义,它们适用于每个分类器,而不仅仅是 SVM。

    另外,我建议避免在循环中使用predict() 函数。在这种情况下,您多次调用predict(),每次调用都会对一个点进行分类。这会减慢您的代码速度。正如您现在可能看到的,predict() 可以将整个测试矩阵作为输入并返回整个标签向量,因此您不必在 for 循环中预先分配和写入此类向量的每个元素。你只给predict()打过一次电话。您可能想尝试类似

    IDX_svm=predict(svmStruct,Xtest);
    

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 2014-11-24
      • 2012-02-29
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2011-06-01
      • 2010-09-14
      • 2021-12-01
      相关资源
      最近更新 更多