KNN算法+kmeans详解

一、KNN算法介绍

KNN算法是一种分类与回归方法,KNN模型:输入为实例的特征向量,对应于特征空间的点,输出为实例的类别。在输入特征向量后,KNN模型事先有一个训练数据集,数据集中的每个实例都有一个类别,根据实例的特征向量与训练数据集中实例的距离,来判断距离输入实例的k近邻数据,根据多数投票原则确定输入实例的类型。

其中有三个参数需要调整:k值、距离度量方式、分类决策规则

距离度量方式有Lp距离、欧氏距离(p=2)、曼哈顿距离(p=1)、最大值距离(p=∞)

k值如果较小,“学习”的近似误差会减小,只有与输入实例较近的训练实例才会对预测结果起作用;“学习”的估计误差会增大,预测结果会对精灵的十里店非常敏感,如果近邻的实例点恰巧是噪声,预测会出错;模型会比较复杂,容易发生过拟合。

k值如果较大,估计误差会减少,近似误差会增大,与输入实例较远的训练实例也会对分类结果起作用;模型会比较简单。极端情况是k=N,无论输入任何输入实例,都会预测为训练数据中最多的那类。

实际应用中,k一般选一个比较小的数值,采用交叉验证法选取最优k。

分类决策规则方面,多数表决规则等价于经验风险最小化。

二、KNN需要的kd树

kd树是为了对k维空间中的实例点进行存储以及对其进行快速检索的树形数据结构。

1.kd树的构建

构造根结点,使结点对应于k维空间中包含所有实例点的超矩形区域;递归(不断地对k维空间进行切分,生成子结点):在超矩形区域上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超巨型区域且分为两个子区域(子结点)。知道子区域内没有实例时终止(终止时的结点为叶结点)。在选择切分点时,选择训练实例点在选定坐标轴上的中位数为切分点,能够得到平衡的kd树,但平衡的kd树搜索效率也未必最优。

2.kd树的k近邻及最近邻查找

在搜索最近邻时,首先找到包含目标点的叶节点,从该叶节点出发,一次回退到父节点,不断查找与目标点最邻近的结点,当确定不可能存在更近的结点时终止。

如何回退父节点?如何确定不可能存在最近邻结点?

包含目标点的叶节点,以此节点的实例点为当前最近点,目标的最近邻一定是以目标点为中心并通过当前最近点的超球体内部,返回当前结点的父节点,如果父节点的另一子节点的矩形区域与球形区域相较,那么在相较的区域内寻找与目标点更近的实例点,如存在,更新当前最经典,算法转回更上一级的父节点。

种植条件:不可能存在最近邻结点:(1)如果父节点的另一子节点的超矩形区域与超球体不想交 (2)不存在比当前最近点更近的点。

猜你喜欢

转载自www.cnblogs.com/fayexu1/p/9461549.html