基于matlab的分类器性能测试

基于matlab的分类器性能测试,matlab,testing,machine-learning,classification,supervised-learning,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_sv

您好,我已经在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)));
%训练我的分类器
svmStruct=fitcsvm(Xtrain,Ytrain,'KernelFunction','linear','standarding',true);

%预测未知输入的输出准确度仅定义为正确预测的标签与测试/验证集中标签总数之间的比率。因此,如果您有测试标签向量(
Ytest
I猜想)和预测标签向量(
IDX_-svm
I猜想),而不是使用混淆矩阵,那么您可以简单地运行

Accuracy=sum(IDX_svm==Ytest)/length(Ytest)
精度将在[0;1]范围内,您只需将其乘以100即可按百分比进行缩放

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

  • 如果您之前评估过精度
    • 1-精度
      如果
      精度
      在范围[0;1]内
    • 100精度
      如果
      精度
      以百分比表示
  • 如果您只想评估错误率
    • 错误预测的标签与测试/验证集中标签总数之间的比率:
      ErrorRate=sum(IDX\u svm~=Ytest)/length(Ytest)
      。该值将在[0;1]范围内
    • 将上述结果乘以100将得出错误率百分比
这些是标准定义,它们适用于每个分类器,而不仅仅是SVM

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

IDX_svm=predict(svmStruct,Xtest);