统计学习方法(机器学习)——3、k近邻法(KNN)

k近邻法(KNN)


KNN算法

KNN算法

        KNN没有显示的学习过程



KNN模型

        KNN模型实际上对应于对特征空间的划分。模型由三个基本要素——距离度量、k值的选择和分类决策规则决定。

模型

        KNN中,当训练集、距离度量、k值及分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一地确定。这相当于根据上述要素将特征空间划分为一些子空间,确定子空间里的每个点所属的类别。下图是二维特征空间划分的一个例子:
在这里插入图片描述


距离度量

        特征空间中两个实例点之间的距离是两个实例点相似程度的反应,KNN的特征空间一般是 n n n维实数向量空间 R n R^n Rn,距离的度量一般是 L p L_p Lp距离,如常用的欧氏距离。
        设特征空间 X X X n n n维实数向量空间 R n R^n Rn x i , x j ∈ X , x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T x_i,x_j∈X,x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T xi,xjX,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)},...,x_j^{(n)})^T xj=(xj(1),xj(2),...,xj(n))T x i , x j x_i,x_j xi,xj L p L_p Lp距离定义为:
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p , p ≥ 1 L_p(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{\frac1p}, p\geq1 Lp(xi,xj)=(l=1nxi(l)xj(l)p)p1,p1

  • p = 2 p=2 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)^{\frac12} L2(xi,xj)=(l=1nxi(l)xj(l)2)21
  • p = 1 p=1 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 = ∞ p=\infty p=时,是各个坐标距离的最大值,即
    L 1 ( x i , x j ) = ( m a x ∣ x i ( l ) − x j ( l ) ∣ ) L_1(x_i,x_j)=(max|x_i^{(l)}-x_j^{(l)}|) L1(xi,xj)=(maxxi(l)xj(l))
            下图是二维空间中 p p p取不同值时,与原点的 L p L_p Lp距离为1的点的图形:
    在这里插入图片描述

k值的选择

        k值的选择会对KNN的结果产生重大影响。

  • 选择较小的k值
            此时相当于用较小的邻域中的训练实例进行预测,近似误差会减小,但估计误差会增大。如果临近的实例点恰巧是噪声,预测就会出错。换句话说,k值的减小意味着整体模型变得复杂,容易发生过拟合

  • 选择较大的k值
            此时相当于用较大的邻域中的实例进行预测,其优点是可以减少学以的估计误差,缺点是近似误差会增大,这时与输入实例较远的(不相似的)训练实例也会对预测起作用。k值的增大意味着模型整体变得简单。

        在实际应用中,一般选择一个较小的k,然后采用交叉验证法选取最优的k值。


分类决策规则

        KNN中的分类决策规则往往是多数表决,即由输入实例的k个邻近的训练实例中多数类决定输入实例的类别。下证,多数表决规则等价于经验风险最小化

        如果分类的损失函数为0-1损失函数,分类函数为:
f : R n → { c 1 , c 2 , . . . , c k } f:R^n\rightarrow \{c_1, c_2,...,c_k\} f:Rn{c1,c2,...,ck}
        那么误分类的概率是:
P ( Y ≠ f ( X ) ) = 1 − P ( Y = f ( X ) P(Y\not=f(X))=1-P(Y=f(X) P(Y=f(X))=1P(Y=f(X)
        对给定的实例 x ∈ X x\in X xX,其最邻近的k个训练实例点构成集合 N k ( x ) N_k(x) Nk(x),如果涵盖 N k ( x ) N_k(x) Nk(x)的区域的类别是 c j c_j cj,那么误分类的概率是:
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 ) \frac1k\sum_{x_i\in N_k(x)} I(y_i\not = c_j)=1-\frac1k\sum_{x_i\in N_k(x)} I(y_i= c_j) k1xiNk(x)I(yi=cj)=1k1xiNk(x)I(yi=cj)
        要使得误分类率最小即经验风险最小,就要使得 ∑ x i ∈ N k ( x ) I ( y i = c j ) \sum\limits_{x_i\in N_k(x)} I(y_i= c_j) xiNk(x)I(yi=cj)最大,即多数表决规则


KNN的实现——kd树

        实现KNN时,主要考虑的问题就是如何对训练数据进行快速搜索。当特征空间维数较大及训练数据容量大时,线性扫描计算非常耗时,下面介绍kd树方法
        kd树是一种对 k k k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是二叉树,表示对 k k k维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的超平面将 k k k维空间切分,构成一系列的 k k k维超矩形区域。kd树的每个节点对应于一个 k k k维超矩形区域。


构造kd树算法

在这里插入图片描述
在这里插入图片描述

二维空间上构造kd树的例子

在这里插入图片描述
        如果实例点是随机分布的,kd树搜索的平均计算复杂度是 O ( l o g N ) O(logN) O(logN),这里 N N N是训练实例数,kd树适用于训练实例数远大于空间维数时的KNN。


搜索kd树算法

在这里插入图片描述
在这里插入图片描述

二维空间上搜索kd树的例子

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值