KNN算法学习-matalb

本文介绍了使用Matlab实现KNN算法的过程,作者基于现有代码进行了调整,作为个人学习笔记。详细内容可见CSDN博客链接。
摘要由CSDN通过智能技术生成

(参考:【CSDN】http://blog.csdn.net/llp1992)代码是基于别人的代码进行了一点小修改 ,作自己学习记录用。

function relustLabel = KNN(test_data,train_data,labels,k)
%   inx 为 输入测试数据,data为样本数据,labels为样本标签
[datarow , datacol] = size(train_data);%size返回数据矩阵的行数和列数
diffMat = repmat(test_data,[datarow,1]) - train_data ;
distanceMat = sqrt(sum(diffMat.^2,2));%求距离,返回每一行的和
[B , IX] = sort(distanceMat,'ascend');%ascend 升序排列,B排序后矩阵,IX在原矩阵中的索引
len = min(k,length(B));
relustLabel = mode(labels(IX(1:len)));%mode返回众数,即标号多的类
end
clc
clear
close all

total_data=load('C:\Users\zan\Desktop\matlab_drive\machine-learnning\KNN\iris_data.mat');
len = size(total_data.features,1);
rand_num=randperm(len);
ratio=0.7;
train_num=ratio*len;
test_num=len-train_num;
data_mat = total_data.features;%属性
labels = total_data.classes;%类
k = 5;
error = 0;
% 归一化处理
maxV = max(data_mat);
minV = min(data_mat);
range = maxV-minV;
newdataMat = (data_mat-repmat(minV,[len,1]))./(repmat(range,[len,1]));
 
% 测试
for i = 1:test_num
    classifyresult = KNN(newdataMat(rand_num(train_num+i),:),newdataMat(rand_num(1:train_num),:),labels(rand_num(1:train_num),:),k);
    fprintf('测试结果为:%d  真实结果为:%d\n',[classifyresult labels(rand_num(train_num+i))])
    if(classifyresult~=labels(rand_num(train_num+i)))
        error = error+1;
    end
end
  fprintf('准确率为:%f\n',1-error/(test_num))

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值