码迷,mamicode.com
首页 > 其他好文 > 详细

k近邻法(k-nearest neighbor, k-NN)

时间:2016-05-09 00:16:16      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

技术分享近邻法(技术分享-nearest neighbor, 技术分享-NN)是一种基本的分类方法。

技术分享近邻法假设给定一个数据集,其中的样例类别已定。分类时,对新的样例,根据这个新样例的技术分享个最近邻的训练样例的类别,通过多数表决等方式进行预测。

因此,技术分享近邻法不具有显式的学习过程。技术分享值的选择、距离度量及分类决策规则是技术分享近邻法的三个基本要素。

技术分享近邻法于1968年由Cover和Hart提出。

 

给定训练集技术分享并且训练集技术分享,一共技术分享个样本,技术分享个维度,用技术分享表示数据集中的第技术分享个样本,用技术分享表示标记(类别)向量,技术分享代表第技术分享个样本技术分享的标记。

我们这时候要预测一个测试样例技术分享的标记技术分享,运用技术分享近邻法,按照以下步骤进行:

  1. 根据选定的距离度量,在训练集技术分享中找出与技术分享最近邻的技术分享个样例,将这些样例表示为集合技术分享
  2. 技术分享中根据分类决策规则(如多数表决)决定技术分享的标记技术分享

技术分享

其中,技术分享为指示函数,即当技术分享时值为1,否则为0,技术分享为训练集的所有标记种类,技术分享为第技术分享个类别的标记。

技术分享为1时,技术分享近邻法就被称为最近邻法。测试样例的类别就完成取决于离它最近的那个样例的类别。

下面我们谈谈技术分享近邻法的实现:技术分享树。

在实现技术分享近邻法的时候,最简单的实现方法肯定是线性扫描(linear scan),这时需要计算测试样例与训练集中的每一个训练实例的距离,当训练集很大时,计算非常耗时,这种方法是不可行的。

为了提高技术分享近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。具体的方法很多,在这里我们介绍技术分享树方法。

技术分享树是一种对技术分享维空间里中的实例点进行存储以便对其进行快速检索的树形数据结构。技术分享树是一个二叉树,表示对技术分享维空间的一个划分(partition)。构造技术分享树相当于不断地用垂直于坐标轴的超平面将技术分享维空间划分,构成一系列的技术分享维超矩形区域。技术分享树的每个结点都对应于一个技术分享维超矩形区域。

对于训练集技术分享,有技术分享个样例,维度为技术分享维,构造技术分享树的步骤如下:

  1. 构造根结点,根结点对应于包含技术分享的所有样例的超矩形区域。
  2. 选择第一维度为坐标轴,以技术分享中所有样例在第一维度上的值的中位数为切分点,将根结点对应的超矩形区域切分为两个子区域。切分由通过切分点并与当前选定的坐标轴垂直的超平面实现。这样就由根结点生成了深度为1的左、右子结点:左子结点里面的所有样例在第一维度上的值小于切分点,右子结点里面的所有样例在第一维度上的值大于切分点。
  3. 重复第2步,对于当前深度为技术分享的结点,选择第技术分享个维度为坐标轴,切分的过程与第2步相同。这样就由深度为技术分享的结点生成了深度为技术分享的左、右子结点。
  4. 直到两个子区域没有实例存在时停止,从而形成技术分享树的区域划分。

举书上的例子,对于数据集技术分享,构造技术分享树,它的特征空间划分如下图所示:

技术分享

构造的技术分享树如下所示:

技术分享

现在我们要利用技术分享树进行最近邻搜索,其图示如下:

技术分享

其中S为测试样例,用S首先找到了包含S的叶节点D,然后以画出S为圆心通过点D的圆,则最近邻一定在这个圆的内部。然后依次返回父结点,看是对应的区域是否与圆相交,比较其中的结点与当前最近点的距离,并进行更新,从而找出最近邻点。

 

k近邻法(k-nearest neighbor, k-NN)

标签:

原文地址:http://www.cnblogs.com/Rambler1995/p/5472262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!