KNN算法
算法原理
- 计算待测样本与train_data的距离d并保存数组中
- 对d进行排序,取d最近的k个样本
- 统计样本的类别或值(k个),取其类别最多的类别(或平均值)
对数据的要求
- 对于 缺失值需要处理(填充或者删除)
- 分类变量需要编码(涉及距离计算)
- 数据需要标准化或者归一化处理(消除量纲的影响。涉及距离计算的算法都需要考虑)
算法的优缺点
一、优点
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树每一次继续切分都要计算孩子区间在需切分维度上的中值,计算量