1、KNN介绍
K近邻算法,也叫KNN算法,是机器学习中最基本的算法。其核心思想是给定一些已经分好类的样本,当一个新样本加入时,计算它到每个数据的欧氏距离,然后选择前K个最近的距离,看属于那个类别最多,那这个新样本就属于这个类别。KNN算法主要用来解决分类问题,当然也可以解决回归问题(比较少),当问题是二分类时,K值通常选择1、3、5、7等奇数,这样可以避免平局。
2、K近邻的决策边界以及K的选择
KNN算法的关键点之一就是K的选择,K值的不同对于模型的影响也不同。为了理解K值对于算法的影响,我们首先要了解一个重要的概念,就是决策边界。
决策边界,可以理解为是一种分界线,把不同的类别给分开。例如,我们考试的时候,通过60分就是及格,否则就不及格,那60就是一个决策边界。决策边界分为两大类,分别是线性决策边界和非线性决策边界,这也是决定算法是线性分类器还是非线性条件的关键。
那K值的选择对于决策边界有什么影响呢?
如上图,分别是K等于1,3,5,7,9,11时模型的可视化结果,从图中可以看出,随着K值的增加,决策边界变得越来越平滑。那么,决策边界是越平滑越好吗?其实不然,决策边界变平滑只能说明模型的稳定性变好,但稳定并不代表这个模型就越准确。那怎样选择合适的K值呢?这时就需要通过交叉验证,通过选择不同的K值来建模,查看模型效果,来选择最好的K。
3、交叉验证
交叉验证其实就是模型调参的过程,第一步,就是要把训练数据进一步分为训练集和验证集,要分出验证集的原因是我们需要一种评估机制来选出最好的K值,这里不能用测试数据的原因是测试数据是用来一次性测试的,不能用来训练模型。
交叉验证最常用的方法是K折交叉验证法,即步骤一:把训练数据平均分成K(这里的K是K折中的K,不是模型的K)份,拿其中一份来验证,其他用训练模型;步骤二:重复步骤一,但是验证集选择不一样的,这样可以进行K次。步骤三:把K次的结果求一个平均值,就得到这个参数值的准确率。步骤四:重复步骤一到三,就可以得到不同参数值的准确率,选择准确率最高那个就是最好的参数值。
如果训练数据比较少,我们可以使用留一法交叉验证,即每次只取一个样本作为验证集,其他都用来训练。
由上可知,通过交叉验证法,可以找出模型最佳的K值。
4、特征缩放
至此,KNN算法的核心部分已经讲完,但是还会有一些潜在的隐患。就是当特征之间的量纲相差很大时,对于模型的影响会很大。例如,特征一的范围是[0,10],特征二的范围是[0,10000],因为KNN算法的关键之一是求欧式距离,这时特征二的影响就很明显,特征一对于模型就几乎没什么影响了,此时我们可以通过特征缩放,把两个特征的值都缩小到0到1之间。
特征缩放有两种方法,分别是线性归一化和标准差标准化。其中,线性归一化是把特征值的范围映射到[0,1]区间,标准差标准化的方法使得把特征值映射到均值为0,标准差为1的正态分布。
总结:KNN算法主要用来解决分类问题,比较适合应用在低维空间,因为要计算所有样本的距离,所有在高维空间时表现不好,算法复杂度高。