热门标签 | 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轴分别为两个特征属性。

  

 

 

       


推荐阅读
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 词袋模型的通俗介绍
    词,袋, ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 数据结构与算法的重要性及基本概念、存储结构和算法分析
    数据结构与算法在编程领域中的重要性不可忽视,无论从事何种岗位,都需要掌握数据结构和算法。本文介绍了数据结构与算法的基本概念、存储结构和算法分析。其中包括线性结构、树结构、图结构、栈、队列、串、查找、排序等内容。此外,还介绍了图论算法、贪婪算法、分治算法、动态规划、随机化算法和回溯算法等高级数据结构和算法。掌握这些知识对于提高编程能力、解决问题具有重要意义。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
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社区 版权所有