KNN算法(MATLAB实践)

算法回顾

1、计算已知类别数据集合汇总的点与当前点的距离
2、按照距离递增次序排序
3、选取与当前点距离最近的K个点
4、确定距离最近的前K个点所在类别出现频率
5、返回距离最近的前K个点中频率最高的类别作为当前点的预测分类

代码

KNN.m

function relustLabel=KNN(inx,data,labels,k)
%inx为输入测试数据,data为样本数据,labels为样本标签
[datarow,datacol]=size(data);
diffMat=repmat(inx,[datarow,1])-data;
distanceMat=sqrt(sum(diffMat.^2,2));
[B,IX]=sort(distanceMat,'ascend');
len=min(k,length(B));
relustLabel=mode(labels(IX(1:len)));
end

KNNdataTest.m

function KNNdataTest
data=load('dataTest2.txt');
dataMat=data(:,1:3);
labels=data(:,4);
len=size(dataMat,1);
k=3;
error=0;
%测试数据比例
ratio=0.1;
numTest=uint8(ratio*len);
%归一化处理
maxV=max(dataMat);
minV=min(dataMat);
range=maxV-minV;
newdataMat=(dataMat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
%测试
for i=1:numTest
    classifyresult=KNN(newdataMat(i,:),newdataMat(numTest:len,:),labels(numTest:len,:),k);
    if(classifyresult~=labels(i))
        error=error+1;
    end
end
fprintf('准确率为:%f\n',1-error/(numTest));
end

当k为4时,准确率为1.0。

你可能感兴趣的:(机器学习--学习笔记)