本博客所有内容均整理自《算法图解》,欢迎讨论交流~
了解过机器学习这个概念,一定知道有一种名为k最近邻的算法,简称KNN。
对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
通俗来说,就是近朱者赤,近墨者黑的道理。在有标签的监督学习中,k最近邻一般用于分类,即根据与某一个特征点离得最近的k个点的分类来决定该点的分类,一般是少数服从多数的决策;而在无标签的无监督学习中,k最近邻一般用于聚类,即将某点及与其离得最近的k个点聚到同一个类别中。不过话是这么说,一般对于无监督学习,人们通常使用的是K-Means算法,即k均值算法。
1、分类问题
对于KNN算法的应用,我们首先来看一个例子。
对于下面的这个水果,我们如何判断它具体是哪一个品种呢?
当然,理论上来说,我们必须根据生活经验才能做出判断,我们知道,类似于图中水果的形状和色泽的水果有橙子和柚子,同时我知道,柚子通常比橙子更大,更红。
所以我的脑子里有了如下所示的图表:
所以根据这个图表,以及上图中的水果又大又红的特点,我判断该水果很可能是柚子!
这并不难,但是下面这样的水果呢?
这个水果的大小和色泽都趋近于平庸,不大不小,不红不橙。
那么问题来了,我们如何判断这个水果的品种呢?
试想一下生活中的经验,对于一个陌生人,我们如何判断这个人的职业呢?我们一般会根据这个人的朋友来判断,如果这个人的朋友都是什么科学家啊工程师啊之类的,我们就认为这个人很可能是一个科研工作者;而如果这个人的朋友大多是什么记者啊播音员啊导演啊之类的,我们就认为这个人很可能是一个新闻传媒工作者。
这是自然而然的事情,但是这个自然而然的判断思路,其实就是k最近邻算法。
我们回到上面的问题,要判断图中水果的品种,我们就来看它的“朋友”,当然,这里我们把它的“朋友”称为“邻居”。
我们来看看离它最近的三个邻居:
如图所示,在离它最近的三个邻居中,有两个是橙子,有一个是柚子,所以根据投票法(其实就是少数服从多数)的决策,我们认为这个水果是一个橙子。在这里我们选择了3个邻居,所以我们使用的是3最近邻算法,其实k最近邻算法的k就是指的选择几个邻居来判断。
2、创建推荐系统
现在我们来看一个更加