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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值