KNN算法具体步骤:
1、初始化距离为最大值
2、计算未知样本和每个训练样本的距离dist
3、得到目前k个最邻近样本中的最大距离
4、如果dist小于最大距离,则将该训练样本作为K近邻样本
5、统计k个最近邻样本中每个类别出现的次数
6、选择出现频率最大的类别作为未知样本的类别
MATLAB代码实现如下
%KNN
clear;clc;
K=4;%K值选择
trainData = [1,2.1;1.2,0.3;0.2,1.5;0.4,3.4;0.5,1.8;0.6,2.5];%训练样本六组数
trainClass = [1,1,2,2,3,3];%分类:
testData = [0.5,2.3];%测试样本一组
[N,M]=size(trainData);%计算出训练样本矩阵的行列数
%计算训练数据集与测试数据之间的欧氏距离dist
dist=zeros(N,1);
for i=1:N
dist(i,:)=norm(trainData(i,:)-testData);%dist数组储存距离%norm计算欧式距离
end
%将dist从小到大进行排序
[Y,I]=sort(dist,1); %I返回的是序号排序如本例中6 5 1 3 4 2
%将训练数据对应的类别与训练数据排序结果对应
trainClass=trainClass(I);
%确定前K个点所在类别的出现频率
classNum=length(unique(trainClass));%unique返回升序排列的数组中不同的数
labels=zeros(1,classNum);
for i=1:K
j=trainClass(i);
labels(j)=labels(j)+1;
end
%返回前K个点中出现频率最高的类别作为测试数据的预测分类
idx=max(labels);%确定最大值
for a=1:classNum%找出这个最大值
if(labels(a)==idx)
break;
end
end
fprintf('该测试数据属于类 %d\n',a);
%KNN算法