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

机器学习笔记之八——knn最简单的机器学习算法以及KD树原理

上一节结束了线性回归、逻辑回归,今天一节来介绍机器学习中最简单的算法:K近邻(KNN,全称K-nearstNeighbor&

上一节结束了线性回归、逻辑回归,今天一节来介绍机器学习中最简单的算法:  


 K近邻(KNN,全称K-nearst Neighbor)

      概述:判断一个样本的label只需要判断该样本周围其他样本的label。简言之,朋友选啥我选啥。


      具体实现

          对于特征为X(X可以是多个),样本为y的训练集,当我们需要预测的时候,直接将需要预测的目标样本yi拿过来,在训练集中遍历,寻找与目标样本yi的特征Xi距离相近的点(距离相近的意思可以是欧几里的距离,也可以是其他,距离的大小由我们人为规定)。

         找到我们距离相近的点(可能是多个,这个点要多少由我们认为规定。这些点被称为近邻点)之后:

         如果是分类问题,那么就对这些点的label进行投票法(就是选数量最多的那个类别)或者加权投票法(把距离的倒数作为权值,加权求和)。

         如果是回归问题,就对这些点的label求平均值,或者加权平均值作为目标样本的结果。


       调参(需要我们给定的参数)

         (1)、K值,即判断样本需要几个近邻点。过大容易欠拟合,过小容易过拟合。

        (2)、距离的度量:一般使用欧几里的距离。

        (3)、决策规则:使用投票法、平均法,还是加权投票法、加权平均法。


KD树

  按照上面的思路,在训练集中遍历寻找近邻点的方法叫做暴力搜索,显然这种暴力搜索的开销是极其巨大的,每一次预测都要遍历整个训练集,在数据集较大的时候我们采用另一种方法来寻找近邻点,那就是KD树。

  构建KD树:

      对于具有两个特征值X1和X2的样本,计算样本中两个特征的方差,对方差大的特征取中位数,将中位数作为根结点的判断条件,小于中位数的放在左子树,大于中位数的放在右子树。

      对左、右子树进行同样的操作,如:在左子树的样本中,计算两个特征的方差,对方差大的特征取中位数,将中位数作为根结点的判断条件……

    如此循环,直到样本点分完,KD树构建完成。

   以上是对于两个特征,N个特征的时候也是一样的。

 

  如何预测?

     第一步,在KD树中找到包含目标点的叶子节点。

     第二步,以目标点为圆心,以目标点到这个叶子节点的的距离为半径,画图,最近邻点一定在这个圆里面。(对于对于多个特征,这里就是超球体了)。

      第三步,找到这个叶子节点的父节点A,检查该父节点A的另一子树的所有结点构成的超矩形体是否和超球体有相交(就是另一子树的结点是否有结点落在这个圆、超球体里面,相交就可能有),若相交,遍历此节点下是否有更加近的近邻点,有就更新。

     第四步,若没有,就返回第三步中说的的父节点A的父节点B,对B进行第三步中的操作,检查是否有相交,是否有更近的近邻点。

  下图为一个二维特征的KD树预测过程,x,y轴分别为两个特征属性。

  

 

 

       


推荐阅读
  • 使用Matlab创建动态GIF动画
    动态GIF图可以有效增强数据表达的直观性和吸引力。本文将详细介绍如何利用Matlab软件生成动态GIF图,涵盖基本代码实现与高级应用技巧。 ... [详细]
  • KNN算法在海伦约会预测中的应用
    本文介绍如何使用KNN算法进行海伦约会的预测。我们将从数据导入、数据预处理、数据可视化到最终的模型训练和测试进行全面解析。 ... [详细]
  • 大数据SQL优化:全面解析数据倾斜解决方案
    本文深入探讨了大数据SQL优化中的数据倾斜问题,提供了多种解决策略和实际案例,旨在帮助读者理解和应对这一常见挑战。 ... [详细]
  • 解决MySQL Administrator 登录失败问题
    本文提供了解决在使用MySQL Administrator时遇到的登录错误的方法,包括启动变量和服务部分禁用的问题。同时,文章还介绍了通过安全配置模式来解决问题的具体步骤。 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • 本文介绍如何使用Java实现AC自动机(Aho-Corasick算法),以实现高效的多模式字符串匹配。文章涵盖了Trie树和KMP算法的基础知识,并提供了一个详细的代码示例,包括构建Trie树、设置失败指针以及执行搜索的过程。 ... [详细]
  • 利用Dlib进行高效的人脸特征提取与识别
    本文介绍了Dlib库,一个集成了多种机器学习算法的C++工具包,特别适用于需要处理复杂任务的应用场景。Dlib不仅支持机器人技术、嵌入式系统开发、移动应用及高性能计算环境,还提供了强大的人脸检测与特征提取功能。 ... [详细]
  • 专注于模式识别与机器学习的研究生,对于该领域内的就业方向及具体职位要求有着浓厚的兴趣。本文将探讨智能图像/视频处理工程师的岗位要求,并为相关专业的学生提供学习建议。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 本文介绍了推荐系统的基本概念及其在个性化服务中的重要作用,重点探讨了协同过滤算法的工作原理,包括基于用户的协同过滤和基于物品的协同过滤两种方式,并详细解释了几种常见的相似度计算方法。 ... [详细]
  • 汇编语言标识符和表达式(四)(表达式与符号定义语句)
    7、表达式表达式是程序设计课程里的一个重要的基本概念,它可由运算符、操作符、括号、常量和一些符号连在一起的式子。在汇编语言中,表达式分为:数值表达式和地址表达式。(1)进制伪指令R ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • 吴石访谈:腾讯安全科恩实验室如何引领物联网安全研究
    腾讯安全科恩实验室曾两次成功破解特斯拉自动驾驶系统,并远程控制汽车,展示了其在汽车安全领域的强大实力。近日,该实验室负责人吴石接受了InfoQ的专访,详细介绍了团队未来的重点方向——物联网安全。 ... [详细]
  • 本周三大青年学术分享会即将开启
    由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
  • 深入解析层次聚类算法
    本文详细介绍了层次聚类算法的基本原理,包括其通过构建层次结构来分类样本的特点,以及自底向上(凝聚)和自顶向下(分裂)两种主要的聚类策略。文章还探讨了不同距离度量方法对聚类效果的影响,并提供了具体的参数设置指导。 ... [详细]
author-avatar
潜伏在人间_144
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有