K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 整体来讲KNN算法是相对比较容易理解的算法。其中的K表示最接近本身的K个数据样本。KNN算法和K-Means算法不一样的是,K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来作归类的,也就是说,有一个样本空间里的样本分红很几个类型,而后,给定一个待分类的数据,经过计算接近本身最近的K个样原本判断这个待分类数据属于哪一个分类。你能够简单的理解为由那离本身最近的K个点来投票决定待分类数据归为哪一类。html
Wikipedia上的KNN词条中有一个比较经典的图以下:面试
从上图中咱们能够看到,图中的有两个类型的样本数据,一类是蓝色的正方形,另外一类是红色的三角形。而那个绿色的圆形是咱们待分类的数据。算法
咱们能够看到,机器学习的本质——是基于一种数据统计的方法!那么,这个算法有什么用呢?咱们来看几个示例。shell
假设咱们须要判断毛巾的品质好坏,毛巾的品质好坏能够抽像出两个向量,一个是“酸腐蚀的时间”,一个是“能承受的压强”。若是咱们的样本空间以下:(所谓样本空间,又叫Training Data,也就是用于机器学习的数据)数据结构
向量X1机器学习 耐酸时间(秒)学习 |
向量X2测试 圧强(公斤/平方米)spa |
品质Yrest |
7 |
7 |
坏 |
7 |
4 |
坏 |
3 |
4 |
好 |
1 |
4 |
好 |
那么,若是 X1 = 3 和 X2 = 7, 这个毛巾的品质是什么呢?这里就能够用到KNN算法来判断了。
假设K=3,K应该是一个奇数,这样能够保证不会有平票,下面是咱们计算(3,7)到全部点的距离。(关于那些距离公式,能够参看K-Means算法中的距离公式)
向量X1 耐酸时间(秒) |
向量X2 圧强(公斤/平方米) |
计算到 (3, 7)的距离 |
向量Y |
7 |
7 |
坏 | |
7 |
4 |
N/A | |
3 |
4 |
好 | |
1 |
4 |
好 |
因此,最后的投票,好的有2票,坏的有1票,最终须要测试的(3,7)是合格品。(固然,你还可使用权重——能够把距离值作为权重,越近的权重越大,这样可能会更准确一些)
注:示例来自这里,K-NearestNeighbors Excel表格下载
假设咱们有下面一组数据,假设X是流逝的秒数,Y值是随时间变换的一个数值(你能够想像是股票值)
那么,当时间是6.5秒的时候,Y值会是多少呢?咱们能够用KNN算法来预测之。
这里,让咱们假设K=2,因而咱们能够计算全部X点到6.5的距离,如:X=5.1,距离是 | 6.5 – 5.1 | = 1.4, X = 1.2 那么距离是 | 6.5 – 1.2 | = 5.3 。因而咱们获得下面的表:
注意,上图中由于K=2,因此获得X=4 和 X =5.1的点最近,获得的Y的值分别为27和8,在这种状况下,咱们能够简单的使用平均值来计算:
因而,最终预测的数值为:17.5
注:示例来自这里,KNN_TimeSeries Excel表格下载
KNN算法还能够用来作平滑曲线用,这个用法比较另类。假如咱们的样本数据以下(和上面的同样):
要平滑这些点,咱们须要在其中插入一些值,好比咱们用步长为0.1开始插值,从0到6开始,计算到全部X点的距离(绝对值),下图给出了从0到0.5 的数据:
下图给出了从2.5到3.5插入的11个值,而后计算他们到各个X的距离,假值K=4,那么咱们就用最近4个X的Y值,而后求平均值,获得下面的表:
因而能够从0.0, 0.1, 0.2, 0.3 …. 1.1, 1.2, 1.3…..3.1, 3.2…..5.8, 5.9, 6.0 一个大表,跟据K的取值不一样,获得下面的图:
![]() |
![]() |
![]() |
![]() |
![]() |
注:示例来自这里,KNN_Smoothing Excel表格下载
最后,我想再多说两个事,
1) 一个是机器学习,算法基本上都比较简单,最难的是数学建模,把那些业务中的特性抽象成向量的过程,另外一个是选取适合模型的数据样本。这两个事都不是简单的事。算法反而是比较简单的事。
2)对于KNN算法中找到离本身最近的K个点,是一个很经典的算法面试题,须要使用到的数据结构是“最大堆——Max Heap”,一种二叉树。你能够看看相关的算法。
(全文完)