机器学习(四)~KNN算法
- 1. KNN模型
- 2.策略
- 2.1 距离度量
- 2.2 K值选择
- 2.3 分类决策规则
- 3.KNN算法
- 3.1【构造KD树】
- 3.2 【KD树的最近邻搜索】
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树划分后可以大大减少无效的最近邻搜索,很多样本点由于所在的超矩形体和超球体不相交,根本不需要计算距离,大大节省了计算时间