ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

机器学习十大经典算法-KNN(最近邻学习笔记)

2020-11-23 15:50:51  阅读:165  来源: 互联网

标签:KNN 近邻 样本 距离 学习 算法 类别


机器学习十大经典算法-KNN(最近邻)

最近在学习机器学习,查阅了很多人的博客,受益颇多,因此自己也试着将过学的内容做一个总结,一方面可以提高自己对学习过的算法的认识,再者也希望能帮助到初学者,共勉。。。

1

K-近邻算法原理

K最近邻(kNN,k-NearestNeighbor)分类算法,见名思意:

找到最近的k个邻居(样本),在前k个样本中选择频率最高的类别作为预测类别,什么?怎么那么拗口,没图说个球球,下面举个例子,图解一下大家就会显而易见了,如下图:
机器学习十大经典算法-KNN(最近邻学习笔记)

我们的目的是要预测某个学生在数学课上的成绩。。。
先来说明几个基本概念:图中每个点代表一个样本(在这里是指一个学生),横纵坐标代表了特征(到课率,作业质量),不同的形状代表了类别(即:红色代表A(优秀),绿色代表D(不及格))。

我们现在看(10,20)这个点,它就代表着:在数学课上,某个学生到课率是10%,交作业质量是20分,最终导致了他期末考试得了D等级(不佳)。同理,这6个点也就代表了6个往届学生的平时状态和最终成绩,称之为训练样本。。。。

现在要来实现我们的预测目的了,想象一下现在一学期快过完了,张三同学马上要考试了,他想知道自己能考的怎么样,他在数学老师那里查到了自己的到课率85%,作业质量是90,那么怎么实现预测呢?

张三可以看做是(85,90)这个点–也被称之为测试样本,首先,我们计算张三到其他6位同学(训练样本)的距离,点到点的距离相信我们初中就学了吧(一般用的欧氏距离)。

再选取前K个最近的距离,例如我们选择k=3,那么我们就找出距离最近的三个样本分别属于哪个类别,此例中,自然三个都是A等,所以可预测出张三的数学期末成绩可能是A等(优秀)。倘若李四现在也想进行预测,据他较近的3个中两个D,一个A,那么李四的数学期末成绩被预测为D。这也就是最开始所说的:在前k个样本中选择频率最高的类别作为预测类别。。。

总结其计算步骤如下:

1)算距离:给定测试对象,计算它与训练集中的每个对象的距离
2)找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
3)做分类:根据这k个近邻归属的主要类别,来对测试对象分类

好了,经过上诉过程,你是否对KNN算法基本思想有了一定了解。
原理就说到这吧。。。

2

K-近邻的优缺点

KNN算法的优点:

1)简单、有效。

2)重新训练的代价较低(类别体系的变化和训练集的变化,在Web环境和电子商务应用中是很常见的)。

3)计算时间和空间线性于训练集的规模(在一些场合不算太大)。

4)由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。

5)该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。

KNN算法缺点:

1)KNN算法是懒散学习方法(lazy learning,基本上不学习),一些积极学习的算法要快很多。

2)类别评分不是规格化的(不像概率评分)。

3)输出的可解释性不强,例如决策树的可解释性较强。

4)该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。

5)计算量较大。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

3

K-近邻算法的Python实现

友情提示:本代码是基于Python2.7的,而且需要提前安装numpy函数库(这是我们常用的强大的科学计算包)。。。。

3.1 首先我们介绍一下代码实现步骤:

1)计算已知类别数据集中的点与当前点之间的距离
2)按距离递增次序排序
3)选取与当前点距离最小的k个点
4)统计前k个点所在的类别出现的频率
5)返回前k个点出现频率最高的类别作为当前点的预测分类

3.2 实现:我们先创建一个名为knn.py的文件,整体实现代码如下:

机器学习十大经典算法-KNN(最近邻学习笔记)
机器学习十大经典算法-KNN(最近邻学习笔记)

近期文章预告:
《通俗讲解为什么神经网络参数初始化不能全0的原因》
《10分钟快速入门pytorch(1)》
《通俗讲解隐马尔科夫模型(HMM)-后向算法》
《通俗讲解隐马尔科夫模型(HMM)-维特比算法》
推荐阅读文章:
一文搞懂k近邻(k-NN)算法(一)
完结篇|一文搞定k近邻算法(k-NN)算法(二)
隐马尔科夫模型-前向算法
投稿请联系微信号qinlibo20133868或者m15840540712@163.com

全是通俗易懂的硬货!只需置顶~欢迎关注交流~

机器学习十大经典算法-KNN(最近邻学习笔记)

标签:KNN,近邻,样本,距离,学习,算法,类别
来源: https://blog.51cto.com/15009309/2553583

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有