热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

第九章KNN(K最近邻分类算法)

1、惰性学习法说到惰性学习法,就要提到急切学习法。急切学习法:给定训练集,在接收待分类的新元祖(如检验元组)之前,就构

1、惰性学习法

        说到惰性学习法,就要提到急切学习法。

        急切学习法:给定训练集, 在接收待分类的新元祖(如检验元组)之前,就构造泛化(即分类)模型。如:决策树归纳、贝叶斯分类、基于规则的分类、后向传播分类、支持向量机和基于关联规则挖掘的分类等。

        惰性学习法(也称为基于实例的学习法):给定一个训练元组,简单地存储它 (或只是稍加处理) ,一直等到给定一个检验元组。仅当看到检验元组时,它才进行泛化,以便根据存储的训练元组的相似性对该元组进行分类。

        优点:原理简单,实现起来比较方便。支持增量学习。能对超多边形的复杂决策空间建模。

        缺点:计算开销大,需要有效的存储技术和并行硬件的支撑。

        K近邻算法就是惰性学习法的例子。

2、K近邻算法(KNN算法)

        k最近邻分类法是20世纪50年代早期首次引进的。给定大量训练集时,该方法是劳动密集的,直到20世纪60年代计算能力大大增强之后才流行起来。此后被广泛用于模式识别领域。

        工作原理:存在一个样本数据集合(训练样本集),并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据。最后,选择k个最相似数据中出现次数最多的分类,最为新数据的分类。

        例子:下图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。

2.1  邻近性的度量方法

        “邻近性”用距离度量,距离越大,表示两个点越不相似。

        计算距离的方法:欧几里得距离、曼哈顿距离或其它距离。但多采用欧几里得距离(简单)。

        例:两个点或元组X1=(x11,x12,...,x1n)和X2=(x21,x22,...,x2n)的欧几里得距离是:

      

        换言之,对于每个数值属性,取元组X1和X2该属性对应值的差,取差的平方并累计。并取累计距离计数的平方根。

2.2  属性的数值规范化

        有助于防止具有较大初始值域的属性(如收入)比具有较小初始值域的属性(如二元属性)的权重过大。

        例如,可以通过计算下式,使用最小—最大规范化将数值属性A的值v变换到[0,1]区间中的v'

        其中minA和maxA分别是属性A的最小值和最大值。

2.3  比较的属性不是数值类型而是分类类型(如颜色),如何计算距离?

        对于分类属性,一种简单的方法是比较元组X1和X2中对应属性的值。如果二者相同(例如,元组X1和X2都是蓝色),则二者之间的差为0。如果二者不同(例如,元组X1是蓝色,而元组X2是红色),则二者之间的差为1。

        其他方法可采用更复杂的方案。(例如,对蓝色和白色赋予比蓝色和黑色更大的差值。)

2.4  缺失值的处理

        解决办法:取最大的可能差。

        对于分类属性,假设每个属性都已经映射到[0,1]区间,如果属性A的一个或两个对应值丢失,则取差值为1;

        如果A是数值属性,若两个比较的元组属性A的值均缺失,则取差值为1,若只有一个缺失,另一个存在并且已经规范化(记作v'),则取差值为|1-v'|和|0-v'|中的最大者。

2.5  确定近邻数k的值

        引用李航博士的书【统计学习方法】中的内容:

        K值的选择会对k近邻法的结果产生重大影响。

        如果选择较小的K值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用。但缺点是“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感。如果近邻的实例点恰巧是噪声,预测就会出错。换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合。

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

        如果K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类。模型过于简单,忽略了训练实例中大量有用信息。

        在实际应用中,K值一般取一个比较小的数值。例如采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集)来选择最优的K值。

        引用【数据挖掘概念与技术】中的内容:

         可以通过实验确定。

         从k=1开始,使用检验集估计分类器的误差率。重复该过程,每次k增值1,允许增加一个近邻。选取产生最小误差率的k。

         一般,训练元组数越多,k的值越大。

2.6  对噪声数据或不相关属性的处理

        最近邻分类法使用基于距离的比较,本质上赋予每个属性相等的权重。因此,当数据存在噪声或不相关属性时,它们的准确率可能会受到影响。

        对属性赋予相关性权重w,w越大说明属性对分类的影响越相关。对噪声数据可以将所在的元组直接cut掉。

2.7  算法流程


2.8 算法的改进策略

        最近邻分类法在对检验元组分类时可能非常慢。如果D是具有|D|个元组的训练数据库,而k=1,则对一个给定的检验元组分类需要O(|D|)次比较。改进如下

3、kd

        上面“算法的改进策略”已经提到了搜索树。

        其实,实现k近邻算法时,考虑的主要问题是如何对训练数据进行快速k近邻搜索。这点在特征空间的维数大及训练数据容量大时尤其重要。

        K近邻法最简单的实现方法是线性扫描。这时要计算输入实例与每一个训练实例的距离。当训练集很大时,计算耗时,这种方法是不可行的。

        为了提高k近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。具体方法很多,其中比较常见的是kd方法。

 

        Kd树的详细介绍:

        参见:

        1、李航博士的《统计学习方法》中的章节(k近邻法的实现:kd树)

        2、大牛的博客

 

 

更多文献:可以参见大牛的博客

 

 

 

 

 

 

 

 

 

 

 

 

 


推荐阅读
  • 知识图谱与图神经网络在金融科技中的应用探讨
    本文详细介绍了融慧金科AI Lab负责人张凯博士在2020爱分析·中国人工智能高峰论坛上的演讲,探讨了知识图谱与图神经网络模型如何在金融科技领域发挥重要作用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 聚焦法是一种采用穷尽搜索策略的Filter型特征选择方法,其核心在于寻找能有效区分不同样本的最小特征集合。此方法的评估标准主要依赖于一致性测量。 ... [详细]
  • 智能全栈云风暴:AI引领的企业转型之路
    当提及AI,人们脑海中常浮现的是天才少年独自编写算法,瞬间点亮机器人的双眼。然而,真正的AI革命正由大型企业和机构推动,它们利用全栈全场景AI技术,实现数字化与智能化的深度转型。 ... [详细]
  • 解决getallheaders函数导致的500错误及8种服务器性能优化策略
    本文探讨了解决getallheaders函数引起的服务器500错误的方法,并介绍八种有效的服务器性能优化技术,包括内存数据库的应用、Spark RDD的使用、缓存策略的实施、SSD的引入、数据库优化、IO模型的选择、多核处理策略以及分布式部署方案。 ... [详细]
  • 大数据核心技术解析
    本文深入探讨了大数据技术的关键领域,包括数据的收集、预处理、存储管理、以及分析挖掘等方面,旨在提供一个全面的技术框架理解。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文深入探讨了数据挖掘领域内的十个经典算法,包括但不限于C4.5决策树、K-Means聚类、支持向量机等。这些算法不仅在理论上有深厚的数学基础,也在实践中展现出强大的应用价值。 ... [详细]
  • 数据集成策略:ETL与ELT架构对比及工具选择
    随着企业信息化的深入发展,‘数据孤岛’问题日益突出,阻碍了数据的有效利用与整合。本文探讨了如何通过构建数据仓库解决这一问题,重点分析了ETL与ELT两种数据处理架构的特点及适用场景,为企业选择合适的ETL工具提供了指导。 ... [详细]
  • 致信息安全爱好者的成长指南
    本文旨在为信息安全爱好者提供一份详尽的成长指南,涵盖从学习心态调整到具体技能提升的各个方面。 ... [详细]
  • 本文探讨了数据挖掘技术的发展及其在大数据环境下的应用流程,重点介绍了统计学、在线分析处理、信息检索、机器学习、专家系统和模式识别等领域的最新进展。 ... [详细]
  • 使用R语言进行Foodmart数据的关联规则分析与可视化
    本文探讨了如何利用R语言中的arules和arulesViz包对Foodmart数据集进行关联规则的挖掘与可视化。文章首先介绍了数据集的基本情况,然后逐步展示了如何进行数据预处理、规则挖掘及结果的图形化呈现。 ... [详细]
author-avatar
礼貌粑粑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有