我需要使用KNN search对测试数据进行分类,并找到分类率。
以下是matlab代码:例如:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load fisheriris
x = meas(:,3:4); % x =all training data
y = [5 1.45;6 2;2.75 .75]; % y =3 testing data
[n,d] = knnsearch(x,y,'k',10); % find the 10 nearest neighbors to three testing data
for b=1:3
tabulate(species(n(b,:)))
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%结果显示在命令窗口中:
tabulate(species(n(1,:)))
Value Count Percent
virginica 2 20.00%
versicolor 8 80.00%
tabulate(species(n(2,:)))
Value Count Percent
virginica 10 100.00%
tabulate(species(n(3,:)))
Value Count Percent
versicolor 7 70.00%
setosa 3 30.00%若测点为杂色,则第一、三个测点的分类结果正确,第二个测点的分类错误,分类率为2/3 x100%=66.7%。
有没有想法修改matlab代码以自动查找分类率并将结果保存到Workspace中?
发布于 2012-12-07 21:37:43
通常,您可以使用以下命令来查找正确预测的数量
sum(predicted_class == true_class) % For numerical data
sum(strcmp(predicted_class, true_class)) % For cellstrings或按百分比表示
100 * sum(predicted_class == true_class) / length(predicted_class)在fisheriris的情况下,真正的类应该是species。对于您构建的数据,它将是
true_classes = [cellstr('versicolor'); cellstr('versicolor'); cellstr('versicolor')]在最近邻居的情况下,真正的类将是最近邻居的类。对于单个邻居:
predicted_class = species(n)其中,n是[n, d] = knnsearch(x, y)找到的最近邻居的索引。
sum(strcmp(predicted_class, true_class))
% result: 1当您只使用一个邻居时,这确实是正确的。
https://stackoverflow.com/questions/13756551
复制相似问题