本篇内容参考《百面机器学习》《统计学习方法》
1 KNN算法原理
- 从训练集中获取K个离待预测样本最近的数据样本
- 根据获取得到的K个样本数据预测当前待预测样本的目标属性(分类与回归的目标属性)
2 KNN算法中最重要的三个影响因素
1)K值的选择
一般而言,依据样本分布选择一组K值,通过交叉验证的方式,选择合适的K值
2)距离的度量
一般采用欧式距离
3)决策规则
- 针对分类问题,采用多数表决法或者加权多数表决法
- 针对回归问题,采用平均值法或者加权平均值法
注意:加权的实现,一般采用距离和权重成反比的方式,即距离倒数的归一化操作
3 KNN算法的实现方式
KNN算法中最点是找出K个最近邻的点
1)暴力实现
计算待预测样本点到训练集所有的样本点的距离,然后选择距离最小的K个样本点作为K近邻
当样本数据很多的时候,算法执行效率太低,是其最大的缺点
2)KD-Tree实现
KD-Tree构建(方差最大)
- 第一步:计算m个数据中n个特征的方差,把方差最大的第k个特征作为根节点,的中位数作为样本的划分点
- 第二步:小于的样本划分到左子树,大于的样本划分到右子树
- 第三步:对于左右子树同样采用方差最大方式,递归产生KD-Tree
KD-tree搜索最近邻(超球体与超矩形体相交)
- 第一步:找到KD-Tree中包含待预测样本点的叶子节点,以目标点到该叶子节点中样本的最小距离为半径得到超球体
- 第二步:返回父节点,超球体是否与另一子节点的超矩形体相交,相交情况下,在该子结点中的样本寻找距离最近的样本点,更新最近邻点,不相交的话,返回父节点的父节点,执行相同操作
- 第三步:返回根节点,算法结束