KNN算法原理详解及python代码实现

KNN算法算法原理对数据的要求算法的优缺点算法需要注意的点算法实现(python)算法原理计算待测样本与train_data的距离d并保存数组中对d进行排序,取d最近的k个样本统计样本的类别或值(k个),取其类别最多的类别(或平均值)对数据的要求对于 缺失值需要处理(填充或者删除)分类变量需要编码(涉及距离计算)数据需要标准化或者归一化处理(消除量纲的影响。涉及距离计算的算法都需要考虑)算法的优缺点一、优点1.准确度高,对异常值与噪声有较高的容忍度2. 没有模型,无需参数估计
摘要由CSDN通过智能技术生成

算法原理

  1. 计算待测样本与train_data的距离d并保存数组中
  2. 对d进行排序,取d最近的k个样本
  3. 统计样本的类别或值(k个),取其类别最多的类别(或平均值)

对数据的要求

  1. 对于 缺失值需要处理(填充或者删除)
  2. 分类变量需要编码(涉及距离计算)
  3. 数据需要标准化或者归一化处理(消除量纲的影响。涉及距离计算的算法都需要考虑)

算法的优缺点

一、优点
1.准确度高,对异常值与噪声有较高的容忍度
2. 没有模型,无需参数估计与训练,容易理解与实现
3. 加入新模型不必重新训练
4. 适合处理多分类任务

一、缺点
1.计算复杂度高
2. 样本不均衡时预测偏差大
3. 可解释能力弱
4. 没有能力自动筛选指标
5. k值选取不确定(一般不超过20):

  • small(k) bias(小) variance(大)
  • large(k) bias(大) variance(小)

算法需要注意的点

1. 不平衡样本可以给KNN的预测造成哪些问题?有什么好的解决方式?
解决方法: 可能造成预测往分类类别较多的一方偏,造成预测有偏
改进方法: 1、设置样本权重,距离小的权重大,距离大的权重小;2、使用一定半径的点来取代距离最近的k个点(表现效果较好)
KD树(为了解决信息计算的冗杂度提高效率)(变量越多欧氏距离区分能力越差)    ⟹    \implies 在高维上效率低下(维度灾难)    ⟹    \implies Ball—Tree算法(优化KD树,耗时更长)

2. 为了解决KNN算法计算量过大的问题,可以使用分组的方式进行计算,简述一下该方式的原理?
将样本集按近邻关系分解成组,给出每组的质心位置,以质心为代表点和位置样本计算距离,选出距离最近的一个或若干个组,再在组内应用一般KNN算法,由于并不是将位置样本与所有样本计算距离,故该计算可减少计算量,但不能减少储存量

3. KD树建立过程中切分维度顺序是否可以优化?
可以先对每一个维度求方差,方差大说明数据越分散,则从方差大维度来逐步切分,可以获得更好的切分效果及树的平衡性

4. KD树每一次继续切分都要计算孩子区间在需切分维度上的中值,计算量

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值