使用不同的k值找出分类率

时间:2012-12-08 08:52:49

标签: matlab knn

我使用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',有没有办法自动改变它?感谢

1 个答案:

答案 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