MATLAB的KNN实现

2018-11-27  本文已影响0人  淇漯草

KNN算法概述:
1.KNN算法是通过已有的数据,已有的标签,对新数据进行分类。
2.分类依据:找最近的K个点,大部分人所在的集合,就是我所在的集合。
3.K的意思:最近的K个点。
举例:2(a类),8(b类),11(a类),30(c类),45(c类),70(a类)
我的值为15,取K=3。
最近的点为:2,8,11
a类2个,b类1个,c类0个
那么我是a类的


一、数据
以矩阵形式存储,此处采用二维(即特征值两个)
一、训练数据,标签,测试数据
我们得到矩阵,形式如下

trainData  = [1.0,2.0;1.2,0.1;0.1,1.4;0.3,3.5]; %为4×2矩阵,每一个数据为横向
trainClass = [1; 1; 2; 2];                                 %标签4×1
testData   = [0.5, 2.3];

二、距离表示
采用欧氏距离

先将testData扩展到与trainData同等形式的矩阵,使得每个值直接相减

temp = repmat(testData, [size(trainData,1), 1]); %将测试点分化为训练集的数量
dist = (temp - trainData).^2; %计算距离各个点的距离,采用欧式距离法
dist = sqrt(sum(dist, 2)); 

三、对距离进行排序

[sorted, sortedIndex] = sort(dist); %此时得到sorted 为4×1的矩阵, 而Index下标为4*1

四、第四步我们是对其类别进行思考
采用k个临近点,此处采用k=3
我们用count数组(与标签对应),记录K个相近顶点中相应标签的个数

k = 3; 
count = zeros(1, length(unique(trainClass)));
for i = 1:k
    count(trainClass(sortedIndex(i))) = count(trainClass(sortedIndex(i))) + 1;
end

五、找出count数组中的最大值,也就是其分类结果

[Max, result] = max(count);

Max为最大值,result为最大值在count的下标,(恰好代表标签)。


上一篇下一篇

猜你喜欢

热点阅读