[机器学习算法]k近邻和kd树

引言

k近邻算法(k-Nearest Neighbor,简称kNN):给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最接近的k个实例,通过这k个实例投票决定该输入实例的类别。

k近邻算法

输入: 熟练集T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
输出: 实例x所对应的类别y

  1. 根据给定的距离度量方式,在训练数据集中找到距离输入样例x最近的k个点,将包含这k个点的x邻域记作N_k(x)
  2. N_k(x)中根据分类决策规则(如多数表决)将x划分到某个类别y

特殊地,当k等于1时,相当于将输入实例x划分到训练数据集中与x距离最近点所属的类别。

k近邻模型

唯一确定一个k近邻模型由三方面构成:距离度量方式、k值的选取和分类决策规则

一、距离度量方式

我们用两个点的距离远近来度量它们的相似程度,k近邻模型的特征空间是n维实数向量空间R^n,我们常使用欧式距离来衡量两个点的距离,但也可以是更一般的L_p距离:

L_p(x_i,x_j)=(\sum_{i=1}^{N}(|x_i^{(l)}-x_j^{(l)}|^p))^{\frac{1}{p}}

二、k值的选择

当选取的k值较小时,相当于用较小邻域的训练实例进行预测,更容易受噪声干扰(比如邻近的实例点恰好是噪声就会出错),即k越小则模型过拟合的风险越大。
当选取的k较大时,相当于用较小邻域的训练实例进行预测,这时候与输入实例较远(相似度较小)的训练实例也会对预测产生影响,从而降低模型准确率。

特别的,k等于1时相当于用离输入样例x最近的训练实例做预测;k等于N时无论输入实例是什么,都简单地用训练实例中样本数最多的类别作为预测类别。

在应用中,k值在比较小的数值范围内取,并且结合交叉验证方法确定最优k值。

三、分类决策规则

k近邻方法中的分类决策规则往往是多数表决,即由输入实例的k个邻近实例中的多数类作为预测类别。

套用监督学习中的损失函数和风险函数知识,多数表决规则等价于经验风险最小化,推导如下:

给定输入实例x,其邻近k个训练实例构成集合N_k(x),如果涵盖N_k(x)区域的类别是c_j,那么误分类率为:

\frac{1}{k}\sum_{x_i\in N_k(x)}I(y_i!=c_j)=1-\frac{1}{k}\sum_{x_i\in N_k(x)}I(y_i=c_j)
要令误分类率即经验风险最小,相当于最大化\sum_{x_i\in N_k(x)}I(y_i=c_j),也就是多数表决。因此在k近邻中多数表决规则等价于经验风险最小化。

kd树

当训练集很大时,计算输入实例和每一个训练实例的距离相当耗时。为了提高k近邻搜索的效率,我们使用特殊的结构存储训练数据来减少计算距离的次数,比如kd树方法。
kd树(k-dimension tree)是一种对k维空间中的实例点进行存储以便对其进行快速检索的二叉树形数据结构。构造kd树相当于不断用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域,kd树上的每一个结点对应于一个k超矩形区域。该超矩形区域垂直于当前划分维度的坐标轴,并在该维度上将空间划分为两部分。

一、构造kd树

输入: k维空间数据集T={x_1,x_2,...,x_N},其中x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(k)})^T
输出:kd

  1. 构造对应包含Tk维空间的超矩形区域:以x^{(1)}为坐标轴,T中所有实例的x^{(1)}坐标的中位数为切分点将超矩形区域划分为两个子区域。此步生成深度为1的左、右结点:左子结点对应坐标x^{(1)}小于切分点的子区域,右子结点对应于坐标x^{(1)}大于切分点的子区域。正好落在划分超平面上的实例点保存在根结点。
  2. 同样地,对深度为j的结点,选择x^{(l)}为切分的坐标轴(l=j(mod\quad k)+1,因为可能存在对同个维度进行多次划分),以该结点的区域中所有实例的x^{(1)}坐标的中位数为切分点划分结点对应的超矩形区域。
  3. 直到两个子区域没有实例存在时停止

注意到没,kd树的思想和二分法很像,并且都能提高搜索的效率。

二、搜索kd树

注意kd树中的k指特征维度数,但k近邻算法中的k表示最邻近的k个点。
搜索方法如下:
输入: 已知的kd树,目标点x
输出: x的最近邻

  1. 先找到kd树中包含目标点x的叶结点(即包含输入样例的超矩形区域):从根结点出发,递归地向下访问直到子结点为叶结点
  2. 以该叶结点为“当前最近点”
  3. 在该叶子结点递归回退,在每个结点进行如下操作:
  • 如果该结点保存的实例点比“当前最近点”更距离目标点更近,则以该实例点为“当前最近点”
  • 当前最近点一定存在于该结点一个子结点对应的区域。检查该子结点的父结点的另一子结点对应的区域是否有更近的点。(即检查另一子结点对应的区域是否与该目标点为球心,以目标点与“当前最近点”间的距离为半径的超球体相交)
  • 如果相交,可能在另一个子结点对应的区域内存在距目标点更近的点,移动到另一个子结点,接着,递归地进行最近邻搜索
  • 如果不相交,向上回退
  1. 当回退到根结点时,搜索结束,最后的“当前最近点”即为x的最近邻点。

需要注意的点

  1. 如果实例点是随机分布的,那么kd树的平均计算复杂度是O(logN)
  2. kd树更适用于训练实例数远大于空间维数的k近邻搜索,当空间维数接近训练实例数时,它的效率会迅速下降,几乎接近于线性扫描(即挨个计算训练数据集每个点和输入样例的距离)
  3. k近邻算法既能用于分类,也能用于回归,比较简单的回归就是用k近邻点的平均值来预测输入样例的预测值。
  4. k近邻模型由三个因素决定:距离度量方法、k值选取和分类决策规则

参考

李航 《统计学习方法》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容

  • k 近邻法 k 近邻算法 k 近邻模型 k 近邻法的实现:kd 树 搜索 kd 树 k 近邻模型实现 k 近邻模型...
    千与千与阅读 564评论 0 3
  • 一.朴素贝叶斯 1.分类理论 朴素贝叶斯是一种基于贝叶斯定理和特征条件独立性假设的多分类的机器学习方法,所...
    wlj1107阅读 3,083评论 0 5
  • k-近邻算法(kNN):采用测量不同特征值之间的距离方法进行分类 优点:简单好用,容易理解,精度高,理论成熟,既可...
    山雾幻华阅读 665评论 0 2
  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,203评论 0 25
  • 观念决定生死 管理做为一门独立学科,与其他学科比较其独到之处就是,管理受观念推动。管理理念不断推陈...
    管杰阅读 397评论 1 2