《统计学学习方法》阅读笔记2:k近邻算法

k近邻法

1、k近邻算法

输入: 训练集数据
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)}
其中, x i ∈ X ⊆ R n x_i \in X \subseteq R^n xiXRn 是实例的特征向量, y i ∈ Y = { c 1 , c 2 , . . . , c K } y_i \in Y = \{c_1,c_2,...,c_K\} yiY={c1,c2,...,cK} 是实例的类别, i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N
输出:实例 x x x 所属的类 y y y
(1)根据给定的
距离度量
,在训练集 T T T 中找出与 x x x 最邻近的 k k k 个点,涵盖这 k k k 个点的 x x x 的邻域记作 N k ( x ) N_k(x) Nk(x)
(2)在 N k ( x ) N_k(x) Nk(x) 中根据分类决策规则决定(如多数表决) x x x 的类别 y y y
y = a r g   m a x c j ∑ x i ∈ N k ( x ) I ( y i = c j ) ,   i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , K y= \underset{c_j}{arg\ max} \sum_{x_i \in N_k(x)} I(y_i=c_j),\ i=1,2,...,N; j=1,2,...,K y=cjarg maxxiNk(x)I(yi=cj), i=1,2,...,N;j=1,2,...,K
其中 I I I 是指示函数,当 y i = c j y_i=c_j yi=cj I I I 为1,否则 I I I 是0。

2、k近邻模型

模型三要素:度量距离、k值、分类决策规则

  • 距离度量
    距离反应了两个实例点之间相似程度。常见距离有 L p L_p Lp 距离、Minkowski距离、欧式距离。
    X X Xn 维实数向量空间 R n R^n Rn x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T xi=(xi(1),xi(2),...,xi(n))T
    • L p L_p Lp距离定义为:
      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 p=1 p=1
    • 欧式距离,上式中 p = 2 p=2 p=2
    • p = ∞ p=\infty p= 时是各个坐标距离的最大值,即
      L ∞ ( x i , x j ) = m a x l ∣ x i ( l ) − x j ( l ) ∣ L_{\infty}(x_i,x_j)=\underset{l}{max}|x_i^{(l)}-x_j^{(l)}| L(xi,xj)=lmaxxi(l)xj(l)
  • k值选择
    k值的选择对结果产生重大影响
    k值近似误差估计误差模型复杂度说明
    k值较小减小增大模型复杂化对近邻点敏感,容易过拟合
    k值较大增大减小模型简单化邻域中不相似的点干扰分类结果
    注: 近似误差,可以理解训练集的训练误差。估计误差,可以理解为对测试集的测试误差。
    在应用中一般 k k k 选择较小的值,使用交叉验证法选取最优值。
  • 分类决策规则
    多数表决规则(等价于经验最小化)

3、k近邻的实现:kd

平衡 kd 树构造算法
输入:k 维空间数据集 T = { x 1 , x 2 , . . . , x N } T=\{x_1,x_2,...,x_N\} T={x1,x2,...,xN}
输出:kd
(1)开始构造根节点,根节点包含所有样例点的超矩形;选择 x ( 1 ) x^{(1)} x(1) 为坐标轴,以 T 中所有实例 x ( 1 ) x^{(1)} x(1)中位数为切分点,将根节点对应的超矩形切分为两个子区域。切分由过 x ( 1 ) x^{(1)} x(1) 中位数的点且垂直于 x ( 1 ) x^{(1)} x(1) 轴的超平面实现。
以根节点生成深度为1的左、右结点:左子树对应 x ( 1 ) x^{(1)} x(1) 的坐标小于切分点的子区域,右子树对应 x ( 1 ) x^{(1)} x(1) 大于切分点的子区域。
将落在超平面上的点放在根节点中。
(2)重复:深度的为 j 的结点,选择 x l x_{l} xl 为切分的坐标轴,其中 l = j   m o d   k   + 1 l=j\ mod\ k\ + 1 l=j mod k +1 。选择 x ( l ) x^{(l)} x(l)中位数作为切分点。
(3)直到两个顶点之间没有实例存在时停止,从而形成 kd 树。

kd 树邻近搜索
输入:kd 树;目标点 x
输出:x 的最近邻点
(1)在 kd 树中搜索包含 x叶子结点
(2)以此叶结点为当前最近叶结点;
(3)递归回退,进行如下操作:
(a)若该结点保存的实例比当前最近结点更靠近目标点,则以该实例为“当前最近点”;
(b)当前最近点一定存在于该结点一个子结点对应的区域内。检查该结点的父结点的另一个子结点对应的区域是否有更近的点。具体来说就是检出另一个结点对应的区域是否与以目标点为中心、目标点到“当前最近点”间的距离为半径的超球体相交。
若相交则移动到另一个结点,接着递归搜索最近邻搜索。
(4)当回退到根节点,搜素结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值