机器学习(四)~KNN算法

1. KNN模型

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

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

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

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

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

2.策略

2.1 距离度量

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

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

在这里插入图片描述

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树划分后可以大大减少无效的最近邻搜索,很多样本点由于所在的超矩形体和超球体不相交,根本不需要计算距离,大大节省了计算时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值