我必须使用k个最近邻居对虹膜数据进行分类,(k = 1:30)我已将数据分为样本和涉及到留一法式交叉验证的训练,所以我有以下脚本:
load fisheriris
group=[ones(1,50), 2*ones(1,50), 3*ones(1,50)]';
for k=(1:30);
for i=(1:150);
sample=meas(i,:);
training1=meas;
training1(i,:)=[];
group_sample=group(i);
group_training=group;
group_training(i)=[];
c(i,k)=knnclassify(sample,training1,group_training,k);
A=confusionmat(group, c(i,k));
mean_error(k)=mean(A(:));
std_error(k)=std(A(:));
end
end
问题是我无法创建混淆矩阵,因为c仅返回我一个值(对于第一个样本),问题出在哪里,有人可以帮忙吗?谢谢!
我认为您可能在此之后:
for k=1:30
for i=1:150
sample=meas(i,:);
training1=meas;
training1(i,:)=[];
group_sample=group(i);
group_training=group;
group_training(i)=[];
c(i,k)=knnclassify(sample,training1,group_training,k);
end
A=confusionmat(group, c(:,k));
mean_error(k)=mean(A(:));
std_error(k)=std(A(:));
end
换句话说,只有在交叉验证循环之后才能找到混淆矩阵。
此代码无效。装鱼group = [ones(1,50),2 * ones(1,50),3 * ones(1,50)]';对于k = 1:30
for i=1:150
sample=meas(i,:);
training1=meas;
training1(i,:)=[];
group_sample=group(i);
group_training=group;
group_training(i)=[];
c(i,k)=fitcknn(sample,training1,group_training,k);
end
A=confusionmat(group, c(:,k));
mean_error(k)=mean(A(:));
std_error(k)=std(A(:));
结束
我不知道哪里出了错