K 近邻算法(K-Nearest Neighbor, KNN)属于一种简单且具有 “懒惰” 特性的监督式学习算法。其简单之处在于不进行参数估计,仅考量特征变量间的距离,以此解决分类或回归问题。“懒惰” 是因为该算法无显式学习及训练过程,仅在接到预测任务时才开始找寻近邻点,致使预测效率相对较低。同时,由于 K 近邻算法针对有响应变量的数据集,故而属于监督式学习方式。K 近邻算法既能用于解决分类问题,也可用于解决回归问题。
1 K近邻算法的基本原理
K 近邻算法的基本原理为:先凭借所有特征变量构建起一个特征空间,特征空间的维数即特征变量的个数。接着,针对某个测试样本 di,依据参数 K 在特征空间内寻觅与其最为邻近的 K 个训练样本观测值。最后,根据这 K 个训练样本的响应变量值或实际分类情况,得出测试样本 di 的响应变量拟合值或预测分类情况。
在处理分类问题时,遵循 “多数票规则” 确定,即若 K 个训练样本中包含样本数最多的类别是某一特定类别,那么测试样本 di 的分类就为此类别。而对于回归问题,则依据 K 近邻估计量确定,即将 K 个训练样本响应变量值的简单平均值作为测试样本 di 的响应变量拟合值。
由此可见,K 近邻算法较为简单且未使用参数,所以在不了解数据分布或者毫无先验知识的情况下,K 近邻算法不失为一个良好的选择。
在使用K近邻算法时,需要注意以下几点:
(1)所有的特征变量均需为连续变量。
这是因为K近邻算法中的核心概念是“近邻”,那么怎么来衡量“近邻”呢?这就需要定义“距离”,通常情况下是用欧氏距离。除了欧氏距离