在MATLAB中,使用以下函数,为什么分类精度(acc1,acc2)的计算方式不同?

以下函数( knn_test )具有以下参数: X 表示数据集样本, Y 表示数据集标签,并且 filterindex 对应于列过滤器。如果要过滤数据,则将filterIndex设置为1,以过滤要过滤的任何列。 我想验证两种保留方法。一个具有 crossval 功能,另一个具有 cvpartition 功能。但是,当我调用此方法时, acc1 acc2 变量显示不同的值。

我在代码中添加了断点并调试了代码。我检查了CVKNnmodels的partition属性,它与Model 2中的de c partition相同。

以下代码可能出了什么问题?

为什么这两个精度变量取不同的值?

如果要使用此功能进行保留分类,应该选择哪种模型?

谢谢。

function [acc1,acc2]=knn_test(X,Y,filterIndex)
columnfilterIndex = find(filterIndex==1);

%Model 1
tra1Data = X(:,[columnfilterIndex]);
tra1Label=Y;
KNnmodel1=fitcknn(tra1Data,tra1Label,'Distance','Euclidean','NumNeighbors',3,'DistanceWeight','Equal','Standardize',true);
rng('default');
CVKNnmodel = crossval(KNnmodel1,'holdout',0.3);
loss=kfoldLoss(CVKNnmodel);
acc1=1-loss;

%Model 2
rng('default');
c = cvpartition(Y,'HoldOut',0.3);
tra2Data=X(c.training,[columnfilterIndex]);
tra2Label=Y(c.training,:);
test2Data=X(c.test,[columnfilterIndex]);
test2Label=Y(c.test,:);
KNnmodel2 = fitcknn(tra2Data,tra2Label,true);
pre_test = predict(KNnmodel2,test2Data);
correctPredictions = (pre_test == test2Label);
acc2 = sum(correctPredictions)/length(correctPredictions);
%perf=classperf(uint8(test2Label),uint8(pre_test)); 
%acc2=perf.CorrectRate;
alv123456 回答:在MATLAB中,使用以下函数,为什么分类精度(acc1,acc2)的计算方式不同?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3145223.html

大家都在问