MATLAB的KNN实现

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 9,446评论 1 10
  • 机器学习实战之K-近邻算法(二) 2-1 K-近邻算法概述 简单的说,K-近邻算法采用测量不同特征值之间的距离方法...
    凌岸_ing阅读 5,830评论 0 6
  • 一夜清风细雨之后早上起来觉的凉爽了很多,套上了长袖。路边来不及等我欣赏的花朵都铺满了土地。小河边的垂柳,绿色的丝发...
    yang2018阅读 2,688评论 5 1
  • 导读:产品仅仅是载体而已,打动顾客的是「内涵」,是企业所要传递的企业价值和追求,许多企业需要做适当的反应和调整。当...
    Jolie2017阅读 2,755评论 0 0
  • 一 莫斯奇最近才发现原来,乔莉一直以来都患有抑郁症,然而除了她自己,没有人知道。 从两年前乔莉的第一个孩子意外流产...
    瓦拉大人阅读 4,340评论 2 4

友情链接更多精彩内容