机器学习(四)~KNN算法

  • 1. KNN模型
  • 2.策略
  • 2.1 距离度量
  • 2.2 K值选择
  • 2.3 分类决策规则
  • 3.KNN算法
  • 3.1【构造KD树】
  • 3.2 【KD树的最近邻搜索】


1. KNN模型

KNN模型关键要素:k值的选取,距离度量的方式和分类决策规则

思路: 对测试样本搜索训练集中最相似的K个样本进行多数表决法预测

优点: 简单,没有训练过程,没有显式的学习过程

缺点: 当特征空间的维度大和训练数据容量大时,线性搜索最近邻点的算法的时间效率很成问题

解决办法: kd树实现、球树实现等(思路:使用特殊结构存储训练数据,减少计算距离的次数)

2.策略

2.1 距离度量

不同的距离度量方式所确定的最近邻点是不同的

欧氏距离(p=2)、曼哈顿距离(p=1)、闵可夫斯基距离(p>2)如下:

knn特征筛选_数据挖掘

2.2 K值选择

1)一般根据样本的分布,选择一个较小的值

2)交叉验证

  • K值的选择反映了对近似误差与估计误差之间的权衡;K值过小就意味着整体模型变得复杂,容易发生过拟合;K值过大,易欠拟合

2.3 分类决策规则

多数表决法 (由输入实例的K个最近邻点的多数类决定输入实例的类)

3.KNN算法

3.1【构造KD树】

1) 从m个样本的n维特征中,分别计算n个特征的取值的方差

2) 用方差最大的第k维特征来作为目标划分维度,取训练数据中第K维特征的取值中位数mid对应的样本作为根节点

3) 对于所有第k维特征的取值小于mid的样本,划入左子树,取值大于等于mid的样本,划入右子树

4) 递归分别继续划分左右子树,直到左右空间无实例

例如:
给定二维数据集T={(2,3)T,(5,4)T,(9,6)T,(4,7)T,(8,1)T,(7,2)T}构造KD树

1) 计算第一维特征(2,5,9,4,8,7)的方差6.97,第二维特征(3,4,6,7,1,2)的方差5.37;

2) 6.97>5.37,选择第一维特征作为分割维度,计算第一维特征(2,5,9,4,8,7)中位数对应样本(7,2)作为根节点

3) 将(2,3),(5,4),(4,7)划入左子树,(9,6),(8,1)划入右子树

4) 递归分别继续划分左右子树,直到左右空间无实例

3.2 【KD树的最近邻搜索】

输入: 已构造的KD树,目标点x
输出: x的最近邻
1) 在KD树里面找到包含目标点的叶子节点
2) 以目标点为圆心,以目标点到叶子节点样本实例的距离为最小半径,得到一个超球体
3) 返回叶子节点的父节点,检查另一个子节点包含的超矩形体是否和超球体相交,如果相交就到这个子节点寻找是否有更加近的近邻,有的话就更新最近邻;如果不相交那就简单了,我们直接返回父节点的父节点,在另一个子树继续搜索最近邻
4) 当回溯到根节点时,算法结束,此时保存的最近邻节点就是最终的最近邻点
注意: 每次搜索只得到一个最近邻,在第二轮中,忽略已选的样本,重新选择最近邻,进行k次;

根据多数表决法,如果是KNN分类,预测为K个最近邻里面有最多类别数的类别;如果是KNN回归,用K个最近邻样本输出的平均值作为回归预测值

  • KD树划分后可以大大减少无效的最近邻搜索,很多样本点由于所在的超矩形体和超球体不相交,根本不需要计算距离,大大节省了计算时间