1

我使用 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”,我需要花时间将 true_class 从“versicolor”更改为“virginica”,有什么方法可以自动更改它吗?谢谢

4

1 回答 1

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
于 2012-12-08T09:10:50.567 回答