-
k近邻算法
输入:训练数据集 , 其中 为实例的特征向量, ,实例特征向量 ,
输出:实例 对应的类别 ,
- 根据给定的距离度量,在T中寻找与 最近的k个点,涵盖这k个点的x的邻域记作 , 2. 在 中根据分类决策规则决定 的类别
如果k=1, 则对应的算法为最近邻算法,
-
模型
当训练集,距离度量,k值及分类决策规律确定下来后,对于任意的输入实例,它所属的类都是唯一确定的,这相当于把特征空间划分为一些子空间,
-
k值选择
如果k选的太小,则近似误差会减小,估计误差会变大,模型会变复杂,容易发生过拟合,容易受到噪声的干扰,
如果k选的太大,则估计误差变小,但近似误差会增大,这样模型会变复杂,
-
分类决策规则
一般都是多数表决,
多数表决的损失函数为0-1损失函数,分类函数为
如果对于输入的实例 , 其最临近的k个训练实例点构成的集合为 , 如果涵盖这个集合的类别为 ,则误分类率为
注意,这里的误分类率指的是一个样本的误分类率,而不是所有输入样本的误分类率,多数表决规则等价于经验风险最小化,
-
kd树
kd树是二叉树,表示对k维空间的一个划分,
构造平衡kd树的算法如下,但平衡kd树不见得是最好的,
输入:k维空间数据集 , 其中
输出: kd树
- 构造根节点,根节点对应包含T的k维空间,选择 位坐标轴,以T中所有实例的 坐标的中位数为切分点,切分由通过切分点并与坐标轴 垂直的超平面实现,切分为两个子节点,左子节点中存放的是 较小的子区域,右子节点存放的是 较大的子区域,将落在切分超平面的实例点保存在根节点,
- 重复,对于深度为 的节点,选择 为切分的坐标轴, , 再次切分这这两个子区域,而后生成深度为 的左右子节点,同样,将落在切分超平面上实例点保存在该节点,
- 直到两个子区域没有实例存在停止,
通俗易懂的说法是开始从第一维开始,选择大于中位数的放到右节点,小于中位数的放到左节点,而后选择第二维,分别对左右节点实施同样的操作,构造kd树,
这里只介绍对于kd树如何进行最近邻搜索,k近邻也是一样的,实质上就是在找训练集中与 最临近的那个点,
输入: 已经构造的kd树,目标点 ,
输出: 的最近邻
- 在kd树中找到包含 的叶节点,经过与树中节点的比较,目标点会落在某一个叶节点上,
- 定义此节点为最近点
- 递归的向上回退,在每个节点执行:
- 如果该节点保存的实例点比当前最近点距离目标点更近,则更新最近点为该实例点
- 检查该节点的父节点的另一个子节点是否存在更近的点,具体地,检查另一子节点对应的去榆中是否与以目标点为球心,以目标点与当前最近点的距离为半径的超球体相交,如果相交,则移动到另一节点,接着递归的完成最近邻搜索,如果不相交,则回退,
- 当回退到根节点时,搜索结束,最后的当前最近点为 的最近点,
ML基本知识(八)K近邻法
猜你喜欢
转载自blog.csdn.net/weixin_37688445/article/details/79275453
今日推荐
周排行