Definition
k-nearest neighbors algorithm(wikipedia),也称K近邻算法。是一种基于对欧式距离判定的分类算法。
- 欧式距离
d = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 ) d = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2)} d=(x1−x2)2+(y1−y2)2)
Algorithm
1、初始化训练集和类别;
2、计算测试集样本与训练集样本的欧氏距离;
3、根据欧氏距离大小对训练集样本进行升序排序;
4、选取欧式距离最小的前K个训练样本,统计其在各类别中的频率;
5、返回频率最大的类别,即测试集样本属于该类别。
CODE
%KNN
clear all
clc
%data
traindata=[1.0,2.0;1.2,0.1;0.1,1.4;0.3,3.5];
trainclass=[1,1,2,2];
testdata=[0.5,2.3];
k=3;
%distance
[row,col]=size(traindata);
test=repmat(testdata,row,1);
%dis=zeros(1,row);
dis=sqrt((traindata(:,1)-test(1,1)).^2+(traindata(:,2)-test(1,2)).^2);
%sort
disclass=[dis(:,1),trainclass(1,:)'];
sortdis=sortrows(disclass);
%count
count= tabulate(sortdis((1:k),2));
[frequency,location]=max(count(:,3));
label=sortdis(location,2);
%disp
str = [ '最终分类结果为:', num2str(label)];
disp(str);
实验输出
最终分类结果为:2