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的下标,(恰好代表标签)。