6.4 KNN 算法
本节我们来看KNN算法。KNN算法通常用来做分类问题。这个算法的思想是用临近样本的标签值来估计待分类样本的标签值。具体来说,就是选取离待分类样本距离最近的k个样本点,如果这k个样本点大多数属于某一类别,那么该样本属于这个类别。
如图6-19所示,在平面中有两种标签的点—红色三角和蓝色方框。绿色圆圈标记(上面有问号标记)的点为待分类的点。首先我们需要预设k的值。k是我们想考察周围点的个数,假设k=3。离绿色圆圈最近的三个点有两个为红色三角,一个是蓝色方框。根据少数服从多数原则,将待分类的点标记为红色三角。
事实上,这样一来我们就完成了分类任务。是不是很简单?相比前几个小节介绍的分类算法,KNN算法执行起来非常简单,易于理解。而且值得注意的是,KNN算法中没有参数需要估计,这和我们之前介绍的算法有根本的不同,没有参数也就无须进行训练。KNN算法的全部过程都在预测阶段。KNN算法依然属于监督式学习,需要我们告知样本集数据的标签,但不要通过训练进行学习,这表示它在机器学习算法中有一定的特殊性。
6.4.1 超参数k
KNN算法虽然没有参数,但是存在超参数,那就是k。需要注意的是,当我们改变k的值时,目标值可能会发生改变。回到上面的例子,如果我们选择k=5(图中虚线圆圈),那么图5-18中这个待分类的点将被划分为蓝色,这是因为它周围最近的5个点红蓝比例为2:3。可见,KNN的分类结果非常依赖预设值k。k是KNN算法中唯一的超参数。如何选取k的值,是KNN算法中的一门学问。
另外要提到的是,关于“距离”的概念。距离最近要怎么定义?在上面这个例子中,我们使用的是平面中两点的几何距离。这个几何距离通常被称为“欧几里得距离(EuclideanDistance)”,这个概念可以被推广到高维空间中。所谓“欧几里得距离”,就是将两个点各个分量相减的平方和开根号,即:
第6章 机器学习算法
175