统计学习笔记(1)k近邻

原理

k近邻法 k-nearest neighbor, k-NN 是一种基本分类与回归方法。
输入:训练数据集
T = { ( x 1 , y 1 ) , ( x 1 , y 1 ) , ⋯   , ( x 1 , y 1 ) } T =\left \{ (x_{1},y_{1}),(x_{1},y_{1}),\cdots ,(x_{1},y_{1}) \right \} T={(x1,y1),(x1,y1),,(x1,y1)}
实例的特征向量
x i ∈ χ ⊆ ℜ n x_{i}\in \chi \subseteq \Re ^{n} xiχn
实例的类别
y i ∈ Y = c 1 , c 2 , ⋯ c k , i = 1 , 2 , ⋯ N y_{i}\in Y = c_{1},c_{2},\cdots c_{k},i=1,2,\cdots N yiY=c1,c2,ck,i=1,2,N
输出:实例 x 所属的类 y
y = a r g max ⁡ c j ∑ x i ∈ N k ( x ) I ( u i = c j ) y = arg \max_{cj} \sum_{x_{i}\in N_{k}(x)}^{}I(u_{i} = c_{j}) y=argcjmaxxiNk(x)I(ui=cj) i = 1 , 2 , ⋯   , N ; j = 1 , 2 , ⋯   , K i=1,2,\cdots ,N; j=1,2,\cdots ,K i=1,2,,N;j=1,2,,K
根据距离度量,涵盖实例 x 最近邻的 k 个点的邻域记做 N k ( x ) N_{k}(x) Nk(x)

简述步骤

  • 给定一个训练数据集,有各自的分类标签。在训练过程中,分类器获取训练数据并简单地记住它
  • 对于新的输入实例 X,kNN将其与所有训练数据进行比较,通过距离度量,在训练数据集中选取离它最近的 k 个实例
  • 找到这k个实例所属种类最多的类别,则将该输入实例分到这个类中

三要素

距离度量

设特征空间 χ \chi χ n n n维实数向量空间 ℜ n \Re ^{n} n , x i , x j ∈ χ x_{i},x _{j}\in\chi xi,xjχ
x i = ( x i ( 1 ) , x i ( 2 ) , ⋯ x i ( n ) ) T x_{i} = (x_{i}^{(1)},x_{i}^{(2)},\cdots x_{i}^{(n)} )^{T} xi=(xi(1),xi(2),xi(n))T
x j = ( x j ( 1 ) , x j ( 2 ) , ⋯ x j ( n ) ) T x_{j} = (x_{j}^{(1)},x_{j}^{(2)},\cdots x_{j}^{(n)} )^{T} xj=(xj(1),xj(2),xj(n))T

x i , x j x_{i},x_{j} xi,xj的距离定义为
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ ) 1 p L_{p}(x_{i},x_{j}) = (\sum_{l=1}^{n} \left | x_{i}^{(l)} - x_{j}^{(l)} \right | )^{\frac{1}{p} } Lp(xi,xj)=(l=1nxi(l)xj(l))p1
L p L_{p} Lp距离
当p=1是为曼哈顿距离;p=2时为欧氏距离

k 值的选择

  • K选择较小的值
    • 近似误差(训练集的误差)减小,估计误差(预测时的误差)增大
    • 噪声敏感
    • 模型变复杂,容易过拟合
  • K选择较大的值
    • 减少估计误差,近似误差增大
    • 整体模型变简单

特殊情况 k=1时,称为最近邻算法

k近邻法没有显式的学习过程

分类决策规则

分类函数
f : ℜ n → c 1 , c 2 , ⋯ c K f:\Re ^{n}\to c_{1},c_{2},\cdots c_{K} f:nc1,c2,cK
误分类率
P ( Y ≠ f ( X ) = 1 − P ( Y = f ( X ) ) P(Y\ne 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}\ne 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)
f ( X ) f(X) f(X)为分类函数

kd树

  • kd树是一种对 K 维空间中的实例点进行存储以便对其进行快速检索的树形数据结构
  • kd树是二叉树,表示对 K 维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。
    在这里插入图片描述
    公式 l = j (   m o d   k ) + 1 l= j( \bmod k)+1 l=j(modk)+1
    其中 j j j为树的深度, k k k是数据总维度,得到的 l l l是下一次切分所选择的维度。

注:kNN的k值选择和kd树两者的k之间没什么关系,kNN中的k是指在选取k个邻近的点进行表决,而kd-tree中的k是指一个样本数据的维度

查询

  • 寻找当前最近点
    • 从根节点出发,递归访问 kd 树,找出包含 x 的叶节点
    • 以此节点为 “当前最近点”
  • 回溯
    • 若该节点比 “当前最近点” 距离目标点更近,更新 “当前最近点”
    • 当前最近点一定存在于该节点一个子结点对应的区域,检查子节点的父节点的另一子节点对应的区域是否有更近的点
  • 当回退回根节点时,搜索结束,最后的“当前最近点”即为最近邻点

kd 树搜索的平均计算复杂度是 O ( log ⁡ N ) O(\log{N} ) O(logN)

实践作业可参考:
link1
link2
link3
link4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值