k近邻算法
k近邻算法( k-Nearest Neighbor)是一种监督学习
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
工作原理
给定测试样本, 基于某种距离度量找出训练集中与其最靠近的 个训练样本, 然后基于这 个邻居的信息来进行预测
一般流程包括:
- 计算已知类别数据集中的点与当前点之间的距离
- 按照距离递增次序排序
- 选取与当前点距离最小的k个点
- 确定前k个点所在类别的出现频率
- 返回前k个点出现频率最高的类别作为当前点的预测分类
分类任务中可选择这 个样本中出现最多的类别标记作为预测结果
回归任务中可将这 个样本的实值输出标记的平均值作为预测结果
k值的选择
当 取不同值时, 分类结果会有显著不同
K值过小:特征空间被划分为更多子空间,整体模型变复杂,预测结果会对近邻点十分敏感,预测就会出错容易发生过拟合
K值过大:近邻误差会偏大,距离较远的点也会同样对预测结果产生影响,使得预测结果产生较大偏差,此时模型容易发生欠拟合
距离度量
若采用不同的距离计算方式也会导致分类结果有显著不同
对函数 ,若它是一个距离度量,则需满足一些基本性质
给定样本 与
最常用的是闵可夫斯基距离(Minkowski distance)
当 时, 闵可夫斯基距离即欧氏距离 (Euclidean distance)
欧几里得空间中两点间直线距离、真实距离或者向量的自然长度
当 时, 闵可夫斯基距离即曼哈顿距离(Manhattan distance)
在欧几里德空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和,也称街区距离
代码实现
FROM IMOOC机器学习
1 | import numpy as np |
参考
机器学习-周志华
Machine Learning in Action by Peter Harrington