《统计学习方法》(第三章)—— K邻近

本文详细介绍了K邻近算法,其通过在训练集中找与新实例最邻近的K个实例来分类。还阐述了K邻近模型,涉及距离度量、K值选择和分类决策规则。此外,讲解了KD树的构造与搜索算法,构造时按坐标轴中位数划分,搜索时递归定位最近点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K邻近算法

  • 定义:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分为这个类。
  • 算法:
      输入:训练数据集:
        T={(x1,y1),(x2,y2),....,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),....,(x_N,y_N)\}T={(x1,y1),(x2,y2),....,(xN,yN)}其中xi∈χ⊆Rnx_i \in\chi\subseteq R^nxiχRn,为实例的特征向量,yi∈γ={c1,c2,...,ck}y_i \in\gamma=\{c_1,c_2,...,c_k\}yiγ={c1,c2,...,ck}为实例的类别,i=1,2,....,N;i=1,2,....,N;i=1,2,....,N;实例特征向量xxx;
      输出:实例xxx所属类别yyy
    • (1)(1)(1)根据给定的距离度量,在训练集TTT中找出与xxx最邻近的kkk个点,涵盖这个kkk个点的xxx的邻域记作Nk(x);N_k(x);Nk(x);
    • (2)(2)(2)Nk(x)N_k(x)Nk(x)中根据分类决策规则(如多数表决)决定xxx的类别y;y;y;
          y=argmaxcj∑xi∈Nk(x)I(yi=cj)y=argmax_{c_j}\sum\limits_{x_i \in N_k(x)}I(y_i=c_j)y=argmaxcjxiNk(x)I(yi=cj)    i=1,2,....,N;j=1,2,...,Ki=1,2,....,N;j=1,2,...,Ki=1,2,....,N;j=1,2,...,K
          III为指示函数,如果条件成立则是111,否则是000,K=1K=1K=1称为最邻近,KKK邻近没有显式的学习过程

K邻近模型

  • 模型
      训练集,距离度量,kkk值和分类决策规则确定后,就可以对任何一个新的输入实例进行预测
  • 距离度量
    • Lp(xi,xj)=(∑l=1n∣xi(l)−xj(l)∣)1pL_p(x_i,x_j)=(\sum\limits_{l=1}^n|x_i^{(l)}-x_j^{(l)}|)^{\frac{1}{p}}Lp(xi,xj)=(l=1nxi(l)xj(l))p1
    • p=2p=2p=2时为欧式距离
    • p=1p=1p=1时为曼哈顿距离
    • p=∞p=\inftyp=L∞(xi,xj)=max⁡l∣xi(l)−xj(l)∣L_\infty(x_i,x_j)=\max_l|x_i^{(l)}-x_j^{(l)}|L(xi,xj)=maxlxi(l)xj(l)
  • K值的选择
    • K值大则模型简单,近似误差大,估计误差小
    • K值小则模型复杂,近似误差小,估计误差大
  • 分类决策规则
    • 多数表示规则:
         如果分类的损失函数为0−10-101损失函数,分类函数f:Rn→{c1,c2,...,ck}f:R^n\to\{c_1,c_2,...,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))对给定区域经验损失函数
        Loss=1k∑xi∈Nk(x)I(yi≠ci)=1−1k∑xi∈Nk(x)I(yi=ci)Loss=\Large\frac{1}{k}\normalsize\sum\limits_{x_i \in N_k(x)}I(y_i\ne c_i)=1-\Large\frac{1}{k}\normalsize\sum\limits_{x_i \in N_k(x)}I(y_i=c_i)Loss=k1xiNk(x)I(yi=ci)=1k1xiNk(x)I(yi=ci)
        要使LossLossLoss最小,就要使∑xi∈Nk(x)I(yi=ci)\sum\limits_{x_i \in N_k(x)}I(y_i=c_i)xiNk(x)I(yi=ci),最大,所以得证

KD树

  • 构造KD树
    • 算法:
        输入:kkk维空间数据集合T={(x1,y1),(x2,y2),....,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),....,(x_N,y_N)\}T={(x1,y1),(x2,y2),....,(xN,yN)},其中xi=(xi(1),xi(2),...,xi(k))Tx_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(k)})^Txi=(xi(1),xi(2),...,xi(k))T
      i=1,2,...,N;i=1,2,...,N;i=1,2,...,N;
        输出:kdkdkd
      • (1)(1)(1)开始,构造根节点,根节点对应于包含TTTkkk维空间的超矩形区域,选择x(1)x^{(1)}x(1)为坐标轴, 以TTT中的所以实例对x(1)x^{(1)}x(1)为中位数,分类左右两个子集,左子集小于x(1)x^{(1)}x(1),右子集大于x(1)x^{(1)}x(1),等于x(1)x^{(1)}x(1)则存在根节点,形成一个二叉树结构
      • (2)(2)(2)重复:以上一次划分为起点,设上一次划分为jjj维,则重新选j=j(modk)+1,j=j\pmod{k}+1,j=j(modk)+1,重新按照(1)(1)(1)进行操作
      • (3)(3)(3)直到两个子区域没有实例存在时停止。从而形成kdkdkd
  • KD树的搜索:
    • 算法:
        输入:测试点(x,y)(x,y)(x,y)
        输出:类别
      • (1)(1)(1)按照最初划分规则递归的寻找包含测试点的最小子区域,先把它定位最近点
      • (2)(2)(2)返回父亲节点,如果此时选中节点集合个数小于kkk,则加入父亲节点,如果选中节点集合个数还小于kkk则加入另一个子节点,如果等于kkk则判断里面最远点和要加入点的距离,如小于最远点的化则更新,选择点的集合,同时如果最远集合的点的圆与子节点区域相交,也需要去判断一下。
      • (3)(3)(3)直到所有递归完成,最后集合里面就是k个最近的点,根据决策规则进行统计答案输出
        我们这里集合可以用优先队列来维护
课后实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值