KNN分类器利用现有的公开数据集(鸢尾花)实现分类器分类

KNN分类器谈论

1.1 KNN研究内容

(1)分类器的原理和算法流程

(2)利用现有的公开数据集(鸢尾花)实现分类器分类

(3)利用某种评价标准对分类结果进行分析评判

1.2 题目研究的工作基础或实验条件

Matlab程序实现

1.3 主要程序代码

tic                                  %计时

load fisheriris                         %数据中包含:meas(150*4花特征数据)

                                    %     和species(150*1 花的类属性数据)

meas= meas(1:100,1:2);                 %选取前两类花的前两个属性进行分类

train=[(meas(1:40,:));(meas(51:90,:))];     %选取数据中每类对应的 前40个作为训练数据

test=[(meas(41:50,:));(meas(91:100,:))];    %选取数据中每类对应的 后10个作为测试数据

trainGroup=[ones(1,40),2*ones(1,40)]';     %类属性设置为1,2

testGroup=[ones(1,10),2*ones(1,10)]';

%KNN分类

mdl=fitcknn(train,trainGroup,'Distance','cityblock','NumNeighbors',100,'Standardize',1,'BreakTies','nearest');

class = predict(mdl,test);

%在matlab中,关于KNN分类的函数为fitcknn,'NumNeighbors'是k值,'cityblock'是计算数据间距离的方法 这里采用曼哈顿距离

%确定类属性的规则,这里选用 最近的K个的最多数 规则

%用plot显示出测试数据分类结果

testGroup=[ones(1,10),2*ones(1,10)]';

figure;

hold on;

plot(testGroup,'o');

plot(class,'*');

legend('正确分类','KNN分类结果');

disp(class);

%计算分类测试的准确率

%正确的分类情况为testGroup,实验测试获得的分类情况为class

count=0;

for i=(1:20)

   if class(i)==testGroup(i)

      count=count+1;

   end

end

fprintf('分类精度为:%f\n' ,count/20);

toc

disp(['运行时间:',num2str(toc)]);

end

1.4 运行结果及分析

运行结果

(1)K=1时: 

  1. K=17时:

    

(3)K=100时:

分析

通过程序的运行得出如下结果,当k=1时,分类准确率为95%、当k=17时,分类准确率为100%、当k=100时,分类准确率为95%。通过结果可以看出,k值的选择会很大程度影响分类效果。

当k值过小时,得到的最邻近数据太少,很大程度影响分类效果。

当k值过大时,模型就会变得过于泛化,影响分类精度。

你可能感兴趣的:(1024程序员节,机器学习,分类,matlab,算法)