02 K近邻方法

K近邻方法

模型

不具有显式的学习过程,表现为k近邻法的模型对特征空间进行划分形成一个又一个的单元,单元中的实例的类标记是确定的。

1、距离的度量
  • 闵氏距离
    L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ P ) 1 P L_p(x_i,x_j) = (\sum_{l=1}^n |x_i^{(l)} - x_j^{(l)}|^{P})^{\frac{1}{P}} Lp(xi,xj)=(l=1nxi(l)xj(l)P)P1

    • p =1 ,曼哈顿距离: L 1 ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ ) L_1(x_i,x_j) = (\sum_{l=1}^n |x_i^{(l)} - x_j^{(l)}|) L1(xi,xj)=(l=1nxi(l)xj(l))

    • p = 2,欧式距离: L 2 ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 ) 1 2 L_2(x_i,x_j) = (\sum_{l=1}^n |x_i^{(l)} - x_j^{(l)}|^{2})^{\frac{1}{2}} L2(xi,xj)=(l=1nxi(l)xj(l)2)21

    • p = ∞ \infty ,切比雪夫距离/各个坐标距离最大值: L ∞ ( x i , x j ) = max ⁡ l ∣ x i ( l ) − x j ( l ) ∣ ) L_{\infty}(x_i,x_j) =\max_{l}|x_i^{(l)} - x_j^{(l)}|) L(xi,xj)=maxlxi(l)xj(l))

在这里插入图片描述

  • 马氏距离:是旋转变换缩放之后的欧式距离

    • D M ( x ) = ( x − μ ) T Σ − 1 ( x − μ ) D_M(x) = \sqrt{(x-\mu)^T \Sigma^{-1}(x-\mu)} DM(x)=(xμ)TΣ1(xμ)
    • D M ( x , y ) = ( x − y ) T Σ − 1 ( x − y ) D_M(x,y) = \sqrt{(x-y)^T \Sigma^{-1}(x-y)} DM(x,y)=(xy)TΣ1(xy)
2、k值的选择
  • k值越小,模型越复杂
  • k值越大,模型越简单
  • k=N,模型失去意义
3、分类决策规则

多数表决

策略

分类误差率最小化,也等价于经验风险最小化

  • 分类函数:

f : R n → { c 1 , c 2 , … , c K } f:R^n \to \{c_1,c_2,\dots,c_K\} f:Rn{c1,c2,,cK}

  • 误分类的概率分布

P ( Y ≠ f ( X ) ) = 1 − P ( Y = f ( X ) ) P(Y \neq f(X)) = 1-P(Y = f(X)) P(Y=f(X))=1P(Y=f(X))

  • 误分类率

1 k ∑ x i ∈ N k ( x ) I ( y i ≠ c j ) = 1 − 1 k ∑ x i ∈ N k ( x ) I ( y i = c j ) \frac{1}{k} \sum_{x_i \in N_k(x)} I(y_i \neq c_j) = 1- \frac{1}{k} \sum_{x_i \in N_k(x)} I(y_i =c_j) k1xiNk(x)I(yi=cj)=1k1xiNk(x)I(yi=cj)

算法

1、k近邻的实现
  • 线性扫描:通过计算输入实例与每个训练实例的距离,当数据规模很大时,非常耗时间和资源

  • kd树:使用特殊的结构存储训练数据,减少计算距离的次数,提高搜索效率

2、kd树原理
  • 数据存储结构
    是 对 k 维 空 间 的 实 例 点 进 行 存 储 以 便 对 其 进 行 快 速 检 索 的 树 形 结 构 k d 树 是 二 叉 树 , 表 示 对 k 维 空 间 的 划 分 构 造 k d 树 相 当 于 不 断 的 垂 直 于 坐 标 轴 的 超 平 面 将 k 维 空 间 进 行 切 分 , 形 成 一 系 列 的 k 维 超 − 矩 形 区 域 k d 树 的 每 一 个 节 点 对 应 一 个 k 维 超 矩 形 区 域 \begin{aligned} &是对k维空间的实例点进行存储以便对其进行快速检索的树形结构\\ &kd树是二叉树,表示对k维空间的划分\\ &构造kd树相当于不断的垂直于坐标轴的超平面将k维空间进行切分,形成一系列的k维超- 矩形区域\\ &kd树的每一个节点对应一个k维超矩形区域\\ \end{aligned} k便kdkkdkkkdk

  • kd树构造方法
    构 造 根 结 点 : 对 应 于 k 维 空 间 中 包 含 所 有 实 例 点 的 超 矩 形 区 域 ; 生 成 子 结 点 : 在 超 矩 形 区 域 上 选 择 一 个 坐 标 轴 和 再 此 坐 标 轴 上 的 一 个 切 分 点 , 确 定 一 个 超 平 面 , 使 该 超 平 面 通 过 选 定 的 超 平 面 并 垂 直 于 坐 标 轴 , 将 当 前 超 平 面 切 分 成 左 右 两 个 子 区 域 ( 子 节 点 ) , 递 归 上 述 过 程 , 不 断 的 对 k 维 空 间 进 行 切 分 , 生 成 子 节 点 ; 生 成 叶 结 点 : k 维 空 间 被 不 断 的 切 分 , 直 到 子 区 域 中 没 有 实 例 时 , 终 止 。 终 止 时 的 结 点 为 叶 结 点 。 \begin{aligned} &构造根结点:对应于k维空间中包含所有实例点的超矩形区域;\\ &生成子结点:在超矩形区域上选择一个坐标轴和再此坐标轴上的一个切分点,确定一个超平面,使该超平面通过\\ &选定的超平面并垂直于坐标轴,将当前超平面切分成左右两个子区域(子节点),递归上述过程,不断的对k维空\\ &间进行切分,生成子节点;\\ &生成叶结点:k维空间被不断的切分,直到子区域中没有实例时,终止。终止时的结点为叶结点。 \end{aligned} k;使k;k

  • 切分点的选择

一 般 选 择 训 练 实 例 在 选 定 坐 标 轴 上 的 中 位 数 作 为 切 分 点 , 这 样 得 到 的 k d 树 是 平 衡 k d 树 一般选择训练实例在选定坐标轴上的中位数作为切分点,这样得到的kd树是平衡kd树 kdkd

3、kd二叉平衡树算法
(1) kd树构造算法
  • 输入:

T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) x i ∈ X = R n ; y i ∈ Y = { c 1 , c 2 , … , c K } ; i = 1 , 2 , … , N ; 实 例 特 征 向 量 x \begin{aligned} &T = {(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)}\\ &x_i \in \mathcal{X}=R^n;y_i \in \mathcal{Y} = \{c_1,c_2,\dots,c_K\};i=1,2,\dots,N;实例特征向量x \end{aligned} T=(x1,y1),(x2,y2),,(xN,yN)xiX=RnyiY={c1c2,,cK}i=1,2,,Nx

  • 输出:kd树
  • 步骤:

开 始 : 1 、 构 造 跟 结 点 , 根 结 点 对 应 包 含 T 的 k 维 空 间 的 超 矩 形 区 域 2 、 选 择 x ( 1 ) 为 坐 标 轴 , 以 T 中 所 有 实 例 的 x ( 1 ) 坐 标 的 中 位 数 为 切 分 点 , 垂 直 于 选 定 坐 标 轴 的 超 平 面 通 过 切 分 点 , 从 而 将 根 结 点 对 应 的 超 矩 形 区 域 切 分 成 两 个 子 区 域 3 、 生 成 的 两 个 子 区 域 , 左 子 区 域 和 右 子 区 域 深 度 均 为 1 。 左 子 区 域 对 应 选 定 坐 标 轴 小 于 切 分 点 的 区 域 ; 右 子 区 域 对 应 于 选 定 坐 标 轴 大 于 切 分 点 的 区 域 4 、 将 落 在 切 分 超 平 面 上 的 实 例 点 存 在 根 结 点 递 归 1 、 对 深 度 为 j 的 结 点 , 选 定 切 分 坐 标 轴 2 、 选 定 坐 标 轴 的 中 位 数 为 切 分 点 3 、 使 超 平 面 垂 直 坐 标 轴 通 过 切 分 点 , 将 深 度 为 j 的 子 区 域 切 分 成 深 度 为 j + 1 的 左 右 子 区 域 4 、 将 落 在 切 分 超 平 面 上 的 实 例 点 保 存 在 该 结 点 结 束 1 、 直 到 两 个 子 区 域 中 没 有 实 例 时 停 止 切 分 2 、 将 最 终 的 实 例 点 保 存 在 最 终 的 叶 结 点 3 、 从 而 生 成 k d 树 的 区 域 划 分 \begin{aligned} &开始:\\ &1、构造跟结点,根结点对应包含T的k维空间的超矩形区域\\ &2、选择x^{(1)}为坐标轴,以T中所有实例的x^{(1)}坐标的中位数为切分点,垂直于选定坐标轴的超平面通过\\ &切分点,从而将根结点对应的超矩形区域切分成两个子区域\\ &3、生成的两个子区域,左子区域和右子区域深度均为1。左子区域对应选定坐标轴小于切分点的区域;右子区域对\\ &应于选定坐标轴大于切分点的区域\\ &4、将落在切分超平面上的实例点存在根结点\\ \\ &递归\\ &1、对深度为j的结点,选定切分坐标轴\\ &2、选定坐标轴的中位数为切分点\\ &3、使超平面垂直坐标轴通过切分点,将深度为j的子区域切分成深度为j+1的左右子区域\\ &4、将落在切分超平面上的实例点保存在该结点\\ \\ &结束\\ &1、直到两个子区域中没有实例时停止切分\\ &2、将最终的实例点保存在最终的叶结点\\ &3、从而生成kd树的区域划分\\ \end{aligned} 1Tk2x1Tx(1)3141j23使jj+14123kd

(2)kd树搜索算法
  • 输入:已构造的kd树,目标点x
  • 输出:x的最近邻
  • 步骤:

1 、 在 k d 树 中 找 出 包 含 目 标 点 x 的 叶 结 点 ( a ) 从 根 结 点 出 发 , 递 归 的 向 下 访 问 k d 树 ( b ) 若 目 标 点 x 当 前 维 的 坐 标 小 于 切 分 点 的 坐 标 , 则 移 动 到 左 子 节 点 ( c ) 若 目 标 点 x 当 前 维 的 坐 标 大 于 切 分 点 的 左 边 , 则 移 动 到 右 子 节 点 ( d ) 直 到 子 节 点 为 叶 结 点 为 止 2 、 以 此 叶 结 点 为 “ 当 前 最 近 点 ” 3 、 递 归 的 向 上 回 退 , 更 新 “ 当 前 最 近 点 ” ( a ) 如 果 该 结 点 保 存 的 实 例 点 比 当 前 最 近 点 距 离 目 标 更 近 , 则 以 该 实 例 点 为 “ 当 前 最 近 点 ” ( b ) 当 前 最 近 点 一 定 存 在 于 该 结 点 的 一 个 子 结 构 对 应 的 的 区 域 。 ( b − 1 ) 检 查 该 子 结 点 的 父 结 点 的 另 一 子 结 点 对 应 的 区 域 是 都 有 更 接 近 目 标 的 点 。 ( b − 2 ) 即 检 查 另 一 子 结 点 对 应 的 区 域 是 否 与 以 目 标 点 为 圆 心 , 以 目 标 点 到 “ 当 前 最 近 点 ” 距 离 为 半 径 的 超 球 体 相 交 。 ( b − 3 ) 如 果 另 一 子 结 点 对 应 的 区 域 与 超 球 体 相 交 , 则 在 另 一 子 结 点 可 能 存 在 距 离 目 标 点 更 近 的 点 。 移 动 到 另 一 子 节 点 , 接 着 , 递 归 进 行 最 近 邻 搜 索 4 、 如 果 另 一 子 结 点 对 应 的 区 域 与 超 球 体 不 相 交 , 则 向 上 回 退 , 当 回 退 到 根 结 点 时 , 搜 索 结 束 , 最 后 的 “ 当 前 最 近 点 ” 则 为 x 的 最 近 邻 点 。 \begin{aligned} &1、在kd树中找出包含目标点x的叶结点\\ &\quad\quad\quad\quad (a)从根结点出发,递归的向下访问kd树\\ &\quad\quad\quad\quad (b)若目标点x当前维的坐标小于切分点的坐标,则移动到左子节点\\ &\quad\quad\quad\quad (c)若目标点x当前维的坐标大于切分点的左边,则移动到右子节点\\ &\quad\quad\quad\quad (d)直到子节点为叶结点为止\\ &2、以此叶结点为“当前最近点”\\ &3、递归的向上回退,更新“当前最近点”\\ &\quad\quad\quad\quad (a)如果该结点保存的实例点比当前最近点距离目标更近,则以该实例点为“当前最近点”\\ &\quad\quad\quad\quad (b)当前最近点一定存在于该结点的一个子结构对应的的区域。\\ &\quad\quad\quad\quad \quad\quad (b-1)检查该子结点的父结点的另一子结点对应的区域是都有更接近目标的点。\\ &\quad\quad\quad\quad \quad\quad (b-2)即检查另一子结点对应的区域是否与以目标点为圆心,以目标点到“当前最近点”距离为半径的超球体相交。\\ &\quad\quad\quad\quad \quad\quad (b-3)如果另一子结点对应的区域与超球体相交,则在另一子结点可能存在距离目标点更近的点。移动到另一子节点,接着,递归进行最近邻搜索\\ &4、如果另一子结点对应的区域与超球体不相交,则向上回退,当回退到根结点时,搜索结束,最后的“当前最近点”则为x的最近邻点。\\ \end{aligned} 1kdx(a)访kd(b)x(c)x(d)23退(a)(b)(b1)(b2)(b3)4退退x
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值