k近邻法
1、k近邻算法
输入: 训练集数据
其中, 是实例的特征向量, 是实例的类别,
输出:实例 所属的类 。
(1)根据给定的距离度量,在训练集 中找出与 最邻近的 个点,涵盖这 个点的 的邻域记作 ;
(2)在 中根据分类决策规则决定(如多数表决) 的类别 :
其中 是指示函数,当 时 为1,否则 是0。
2、k近邻模型
模型三要素:度量距离、k值、分类决策规则。
- 距离度量
距离反应了两个实例点之间相似程度。常见距离有 距离、Minkowski距离、欧式距离。
是 n 维实数向量空间 ,- 距离定义为:
- 曼哈顿距离,上式中
- 欧式距离,上式中
- 当 时是各个坐标距离的最大值,即
- 距离定义为:
- k值选择
k值的选择对结果产生重大影响
注: 近似误差,可以理解训练集的训练误差。估计误差,可以理解为对测试集的测试误差。k值 近似误差 估计误差 模型复杂度 说明 k值较小 减小 增大 模型复杂化 对近邻点敏感,容易过拟合 k值较大 增大 减小 模型简单化 邻域中不相似的点干扰分类结果
在应用中一般 选择较小的值,使用交叉验证法选取最优值。 - 分类决策规则
多数表决规则(等价于经验最小化)
3、k近邻的实现:kd 树
平衡 kd 树构造算法:
输入:k 维空间数据集
输出:kd 树
(1)开始构造根节点,根节点包含所有样例点的超矩形;选择 为坐标轴,以 T 中所有实例 的中位数为切分点,将根节点对应的超矩形切分为两个子区域。切分由过 中位数的点且垂直于 轴的超平面实现。
以根节点生成深度为1的左、右结点:左子树对应 的坐标小于切分点的子区域,右子树对应 大于切分点的子区域。
将落在超平面上的点放在根节点中。
(2)重复:深度的为 j 的结点,选择 为切分的坐标轴,其中 。选择 的中位数作为切分点。
(3)直到两个顶点之间没有实例存在时停止,从而形成 kd 树。
kd 树邻近搜索
输入:kd 树;目标点 x
输出:x 的最近邻点
(1)在 kd 树中搜索包含 x 的叶子结点;
(2)以此叶结点为当前最近叶结点;
(3)递归回退,进行如下操作:
(a)若该结点保存的实例比当前最近结点更靠近目标点,则以该实例为“当前最近点”;
(b)当前最近点一定存在于该结点一个子结点对应的区域内。检查该结点的父结点的另一个子结点对应的区域是否有更近的点。具体来说就是检出另一个结点对应的区域是否与以目标点为中心、目标点到“当前最近点”间的距离为半径的超球体相交。
若相交则移动到另一个结点,接着递归搜索最近邻搜索。
(4)当回退到根节点,搜素结束。
来源:CSDN
作者:crxcoding
链接:https://blog.csdn.net/crxcoding/article/details/104652549