描述
KNN是常见的监督学习算法,输入是实例的特征向量,输出是实例对应的类别。
给定测试样本,基于某种距离计算方法,计算出与其距离最近的K个训练样本,根据多数表决方法判定属于哪个类别。
典型的懒惰学习算法,不具有显示的学习过程。在接受数据时,不做处理,当真正计算的时候才按照算法流程走。
三大要素:
- K值的选择
- 较小的K,会导致过拟合
- 较大的K,会导致欠拟合
- 距离的度量。
不同的距离度量算法所确定的点的距离是不同的。
- Lp距离
- Min距离
- 分类决策规则
算法构造
- 根据已知的实例作为参考
- 选择K(一般选择奇数,并且需要多次试验来确定)
- 计算所有样本与输入样本之间的关系(计算方法有许多种)
- 将距离排序,并选择最仅的K个实例
- 在K个样本中,根据多数表决(加权平均)原则把输入实例归结为该类
kd树的构造。
由于KNN可能的数据量比较大,导致时间复杂度非常大,为了提升效率,引出了kd树数据结构(kd Tree)。
平衡kd树未必是效率最高的。
评价
- 精度高,异常值不敏感
- 计算复杂度高。当某类数据占据较多的时候,容易把实例归纳为该类,产生误差
- 适用于标称型和数值型
优化
加权KNN
不是对元素简单的求平均,而是求他的加权平均
每一项的值*他的权重。
进阶
降维
距离计算的各种算法(欧氏距离,曼哈顿距离等)
KDTree
ballTree