转:经典的KNN算法解释

以下文章转载自:http://blog.sina.com.cn/s/blog_6a6d5ba801012qii.html, 致谢!!!

各位看到标题,如果没有听过KNN算法,会不会觉得疑惑:KNN是甚么呢?是不是CNN看久了,就变成DNNENN、最后变成KNN了呢?当然不是啦 XDKNN全名是k-th nearest neighbor,中文意思是「第k位最接近的邻居」。甚么是「第k位最接近的邻居」呢?假设在一个广场上,有100个朋友,每位朋友都是你的邻居,最接近你的邻居,就是「第一位距离最近的邻居」了,比第一位稍微远一点的邻居,就是「第二位距离最近的邻居」了,以此类推,第10位距离最近的邻居,就是k=10的时候了。

至于KNN算法是甚么,又有甚么特别呢?之前提过了「人工智能与机器学习」。KNN算法就是一种机器学习的算法。在进一步探讨甚么是KNN算法之前,我们先介绍一下甚么是算法。算法可以看成是一种「步骤」的集合。举例来说:我们煮一道菜,第一步是先洗菜,第二步切菜,第三步放油,第四步快炒,第五步加点水闷几分钟,第六步再炒几分钟,最后第七步加盐和味精,然后炒到菜煮熟为止。算法就是这样子,把工作分成详细的步骤,有些步骤可能会重复执行,象是菜不够咸,就再加点盐,一直到口味对了为止。有时候会依照情况的不同而有不同的步骤,象是过马路的时候,如果是红灯,我们重复「等待」的步骤,如果是绿灯,我们会进行「走路过斑马线」的步骤。


由于计算机本身就是执行一道一道的指令,因此算法详细列出来的步骤,已经很接近计算机执行工作的语言。至于KNN算法又是由哪些步骤所组成的呢?在这之前,我们再稍微提一下KNN算法和机器学习之间的关系。之前在「人工智能与机器学习」的文章中稍微提了一下,机器学习就是让机器接收外界输入的资料以后,依照某种算法(一些步骤的集合),训练出一种模型,这个模型是一种从资料学习出来的东西,有了这个东西,机器看到新的资料的时候,不会空空如也,而是有某种程度的经验和智慧,可以了解新的资料了。

在这个过程中,有两种训练的方法:监督式和非监督式的学习。所谓监督式的学习,是指在训练机器学出一个模型的之前,会先有一段训练的时间,在这段时间里面,每一笔资料会有一个正确答案,机器学习以后,会根据答案调整自己学习的方法。举例来说:我们学习数学的时候,可能会练习一些题目,练习以后,会对一下答案,如果算错了,就会调整自己的计算方式,或是检查有没有粗心算错的地方。机器学习里面的监督式学习正是如此,训练之后,才开始有预测的阶段,这个时候输入机器的资料没有正确答案,机器必须根据他之前学习的模型来判断,预测新的资料应该输出哪一个正确答案,而不像再训练阶段的时候,输入的资料会有人类提供的正确答案了。

另外一种非监督式的学习,则是连训练的阶段都没有。我们只给予机器简单的学习方法,或是一个简单的价值观,然后就开始把资料输入机器,让机器自行判断正确答案。举例来说:我们还没上小学之前,已经有了一些基本的说话能力。我们从婴儿开始哑哑学语,我们并不晓得,甚么是主词、动词、受词。我们可能连注音符号都不晓得。但是我们的父母一直跟我们讲话,我们有一天就突然蹦出一些词,第一句可能是「妈妈」!第二句可能是「爸爸」!之后可能开始简单的对话,最后在上小学之前,我们至少会问简单的问题,老师讲的句子也都听的懂,才有办法起立、立正、敬礼,还有学习注音符号,练习写字了。非监督式的学习就是类似如此,我们给机器资料,简单的规则和价值观,剩下的就交给机器一边学习一边预测正确答案是甚么了。

KNN就是一种非监督式的学习法。首先,我们要替每一笔资料定出一个位置,象是下图:



我们的目标是要机器学会怎样子分出红点和蓝点。每个点在平面上有个位置,分别用(x,y)来代表,举个例子来说:红点代表女生的大头照,蓝点代表男生的大头照,x轴代表照片中头发的长度,y轴代表照片中脸面积的大小。现在机器已经知道某些点是男生的大头照(蓝色的点)、某些是女生的大头照(红色的点)。当一张新的大头照输入机器以后(图片里面打问号没有颜色的点)KNN算法就先计算这个点,和其他已经知道男生或女生的资料点之间的距离(图里面画了几条线代表在计算距离)。今天KNNK如果设定成1,也就是(1-NN)的话,代表机器会找第一位距离最近的点,然后看这个点是男生(图中蓝色点)或是女生(图中红色点)。如果这个点是男生,那么我们也预测刚才打问号的这个点(新的资料点)是男生的大头照。之后这个问号点就变成蓝色的,然后继续反覆同样的动作在下一个新输入的资料点,预测新的问号点是男生或是女生。

如果k=3,也就是使用3-NN学习,情况会变成怎样子呢?机器同样先计算图中打问号的点和各个颜色的点的距离,接着选出前三名距离最近的点,然后看看里面红色的点比较多(2个以上的点是红色)还是蓝色的点比较多(2个以上的点是蓝色),如果蓝色点比较多,就判断这个新问号点,是男生的大头照了。以此类推,会有5-NN,7-NN,9-NN学习法,端看问题的需要而定。

KNN学习法就是如此。他的好处是简单,而且是一种非监督式学习方法,让人们省去准备训练资料(资料和对应的正确答案)的时间。然而KNN也有他困难的地方。首先是每个机器学习法都要面对的问题,就是选择特征,用刚才的例子,我们用头发长度和脸大小的面积来让机器学习,如果遇到留长发的男生或是轮廓比较大的女生,可能就判断不大出来:或是说,如果我们改用肤色来判断,比较白的是女生,比较黑的是男生,万一这个规则拿来判断欧洲人,可能也不大行。

另一个困难则是距离的订定。刚才的例子中,头发长度如果用公分来算,差距1公分的头发长度,可能有办法分辨男女。如果是用头发的颜色来判断的话,那么颜色的「距离」就不知道要怎么定了,或许可以定成光线频率的距离,那机器还可以学习,不然「红色」和「黑色」两种颜色之间的距离,可能就不知道要怎么定了。这个问题在语意的问题上,也特别重要。如果我们要判断两个词是否属于同一类东西,但是只看两个词差别的字数,用相异字数的个数来当做坐标上的距离,就会出现一些意想不到的状况。譬如说:「巴黎铁塔」、和「巴黎蛋塔」,只差了一个字,和「巴黎圣母院」差了三个字,所以「巴黎铁塔」和「巴黎蛋塔」比较接近,属于同一类,那么机器学出来的东西,可能就不是我们想要的了。

因此,KNN是个好用的机器学习法,然而在某些问题上,仍然有改进的空间了!希望大家读完这一篇以后,都能了解KNN算法啰!

总结
算法是一些步骤的集合,包含重覆部分与依条件执行的部分
机器学习可分为监督和非监督两种学习法,差别在于有无训练资料(训练资料里面有正确答案给机器参考)
KNN是一种非监督式学习算法,是参考最近k个邻居的答案来做判断
某些问题上(例如语意问题)以及特征的选择,是使用KNN需要注意的地方

参考资料
KNN Algorithm (Wikipedia)
算法Algorithm (Wikipedia) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值