【KNN以及KD树】


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的KNN的原理以及KD树基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、学习类型

监督学习:监督学习通过学习训练数据集中自变量和因变量之间的映射关系,根据其来预测未知数据的输出结果。通过训练标签数据样本来构建模型,进而给无标签数据特定标签。

无监督学习:训练无标签数据,常用于聚类和降维。聚类是把相似对象聚合在一起,目标是确定一组未标记数据的内在关系,进而对未标记数据分类。聚类常用于数据挖掘和信息检索等。“降维”主要用于处理样本数据的特征维度过高但数据本身稀疏的情况。降维对数据的数学关系进行变换将数据集从一个高维度空间映射到另一个低纬度的空间中,通过提升样本的密度来解决“维度灾难”问题。

半监督学习:训练时小部分数据有标签,大部分数据无标签,比监督学习代价成本低,也能达到较高准确度。

强化学习:计算机通过多次迭代自主地修正算法,直到可以做出正确的判断为止。强化学习主要用于描述和解决计算机与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。

二、机器学习算法使用步骤

1.收集数据

网络爬虫收集网站数据,或者公开的数据集

2准备输入数据

确保数据格式符合要求,使用标准数据格式可融合算法和数据源,方便匹配操作。

3分析输入数据

主要人工分析数据,确保没有垃圾数据

4训练算法

将第2、3步得到的格式化数据输入到算法中,抽取信息。

5测试算法

为了评估算法,要测试算法效果。对于监督学习,必须已知用于评估算法的目标变量值;对于无监督学习,必须用其他评估手段检测成功率。

6使用算法

将算法转化为应用程序,检测以上步骤是否在实际操作中能正常运行。

三、KNN

1KNN简介

K-近邻(K-Nearest Neighbor,KNN)算法是数据分类技术中最简单的方法之一。它的工作原理是:假设有一个待分类的新样本,在特征空间(每一个样本被称作是一个数据点,通常由特征向量表示,所有特征向量存在的空间称为特征空间)中与它最相似(特征空间中位置最邻近)的K个样本中的大多数属于某一个类别,则这个待分类的样本也属于这个类别。值得注意的是,使用K-近邻算法时,需要已知样本集中每一个数据与所属分类的对应关系。一般来说,只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的由来。通常K是不大于20的整数。最后,将待分类的新数据归类于所选择的K个最相似数据中出现次数最多的类别。


2KD树简介

实现K-近邻算法时,需要考虑如何对训练数据快速地进行K-近邻搜索,尤其在高维特征空间或大容量训练数据集的应用中,该问题显得更加突出。K-近邻算法的最简单实现是线性扫描,即计算输入数据与每一个训练数据的距离。当训练集较庞大时,这种计算非常耗时,因此这种方法在实际应用中具有较大的局限性。为了提高K-近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。具体实现方法种类很多,本书将主要介绍KD树方法。

KD树是K-Dimension树的简称,是一种查询索引结构,广泛应用于数据库索引中。它是对数据点在K维空间中进行划分的一种数据结构,主要应用于多维空间关键数据的搜索(如范围搜索和最近邻索)。KD树是每个结点都为K维点的二叉树,本质上KD树是一种平衡二叉树(左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是平衡二叉树),目的是提高数据查找的效率。
KD树是一种空间划分树,将整个向量空间划分为特定的几个部分,然后在划分的特定空间内进行相关搜索操作。比如在二维空间中, KD树按照一定的划分规则把二维空间划分出多个空间。

·针对高维数据进行KD树的构建时,需要针对每一个维度进行二分操作。构建KD树的方法如下。
(1)建立根结点,使根结点对应于K维空间中包含所有数据点的超矩形区域(参考图中二维空间中切分的矩形)。
(2)选取方差最大的特征作为分割特征。
(3)选择分割特征的中位数作为分割点。在超矩形区域上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左、右两个子空间。
(4)此时,将数据集中小于中位数的特征值传递给左子空间,大于中位数的特征值传递给根结点的右子空间。此时,数据被分到两个子空间。

(5)递归步骤(2)~(4),不断地对K维空间进行切分,生成子结点,直到子空间内没有数据时终止(终止时的结点为叶子结点)。在此过程中,将数据保存在相应的子结点上。
.KD树中,最顶端的结点称为根结点,没有子结点的结点为叶子结点,而子结点是相对于父结点来说的,它是父结点的下一层结点。
 

·利用KD树可以省去对大部分数据点的搜索,从而减少搜索的计算量,例如,在搜索最近邻点任务中,给定一个目标点,搜索其最近邻,首先找到包含目标点的叶子结点然后从该叶子结点出发,依序回溯到父结点,不断查找与目标点最近邻的结点,当确定不可能存在更近的结点时终止。这样搜索就被限制在空间的局部区域上,效率大为提高。
·搜索KD树的具体流程如下所示。
·(1)在如D树中找出包含目标点x的叶子结点。从根结点出发,递归地向下访问KD树。若目标点当前维度的坐标值小于分割超平面的坐标值,则移动到左子结点否则移动到右子结点,直到子结点为叶子结点为止。
·(2)将第(1)步中确定的叶子结点作为“当前最近点”。

·(3)递归地向上回溯,在每个结点进行以下操作:
·如果该结点保存的数据点比当前最近点距目标点更近,则将该数据点作为“当前最近点”;“当前最近点”一定存在于该结点某一个子结点对应的区域中。检查该子结点的兄弟结点(同一父结点的子结点之间互为兄弟结点)对应的区域是否有更近的点。具体操作为检查另一个子结点对应的区域是否与“超球体”相交。“超球体”是指以目标点为球心,以目标点与“当前最近点”间的距离为半径的球体空间。如果与“超球体”相交,则说明可能在另一个子结点对应的区域内存在距离目标更近的点,此时,移动到另一个子结点。接着,递归地进行最近邻搜索。如果不相交,则向上回退。
·(4)当回退到根结点时搜索结束。最后的“当前最近点”即为目标点x的最近邻点。


总结

提示:这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了KNN的原理以及KD树

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值