我使用KNN搜索对测试数据进行分类并找到分类率。
以下是matlab代码:例如:
load fisheriris
x = meas(:,3:4); % x =all training data
y = [5 1.45;6 2;2.75 .75]; % y =3 testing data for 'versicolor' species
[n,d] = knnsearch(x,y,'k',1); % find the nearest neighbors to three testing data
predicted_class=species(n);
true_class=[cellstr('versicolor'); cellstr('versicolor'); cellstr('versicolor')];
Classification_rate=100*sum(strcmp(predicted_class,true_class))/length(predicted_class);
但是,上面的matlab代码只适用于k = 1,如果我试过k = 2则使用strcmp会出现错误'输入必须大小相同或者其中一个可以是标量。'反正有没有修改代码??
然后,如果我想测试另一个物种,如'virginica',我需要花时间将'trueiclass'从'versicolor'改为'virginica',有没有办法自动改变它?感谢
答案 0 :(得分:0)
我不确定你问题的第一部分。但是对于第二部分,您可以为两个字符串'versicolor'和'virginica'定义一个变量,然后放置一个循环,以便它们随着每次迭代而变化:
Vars = {'versicolor','virginica'};
for i = 1:length(Vars);
true_class = [cellstr(Vars{i}); cellstr(Vars{i}); cellstr(Vars{i})];
Classification_rate{i} = 100*sum(strcmp(predicted_class,true_class))/length(predicted_class);
end