matlab - 测试性能分类器matlab

标签 matlab testing machine-learning classification supervised-learning

您好,我已经在 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)));

最佳答案

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

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

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

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

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

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

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

IDX_svm=predict(svmStruct,Xtest);

关于matlab - 测试性能分类器matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35312938/

相关文章:

matlab - 如何使用matlab与uci协议(protocol)进行通信

java - 测试套件构造失败 -(android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests)。如何解决?

selenium - 如何通过命令行停止appium服务器?

python - 在 scikit-learn 中训练神经网络计算 'XOR'

python - sklearn 的 GradientBoostingRegressor 对不同的输入给出相同的预测

java - 使用 Alchemy 实体提取检索 JSON 输出

matlab - 使用 Matlab 绘制 3D 条形图

正则表达式字母数字字符串丢弃最后 3 位数字和最终的初始 0

matlab - 重置用于在 Matlab/Octave 中绘图的 ColorOrder 索引

java - 使用 maven : run jar before tests and terminate after 进行集成测试