草庐IT

十大常用机器学习算法总结(持续完善)

二哥不像程序员 2023-04-05 原文

前言

之前二哥连载了各类常用的机器学习算法的原理与具体推倒过程,本文我们对常用的十大机器学习算法进行总结。

记得收藏+点赞+评论呦!

 

目录

前言

一、线性回归

二、K近邻算法(KNN)

三、朴素贝叶斯(NB)

四、逻辑回归(LR)

五、支持向量机(SVM)

六、决策树(DT)

七、随机森林(RF)

八、GBDT

九、XGBoost

十、K-Means


一、线性回归

  • 思路:线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w和b。
  • 优点:

      1.模型简单,容易实现
      2.许多非线性模型的基础
      3.机器学习的基石

  • 缺点:

      1.对于非线性数据或者数据特征间具有相关性多项式回归难以建模
      2.难以很好地表达高度复杂的数据

  • 适用场景:线性回归作为最基础的模型,一般需要一个简单的回归模型的时候,通常使用线性回归,同时线性回归也是很多模型的基石。

二、K近邻算法(KNN)

  • 思路:对于待判断的点,找到离他最近的几个数据点,根据他们的类型决定待判断点的类型。
  • 特点:完全跟着数据走,没有什么数学模型。
  • 优点:

      1.理论成熟,思想简单;
      2.可用于非线性;
      3.准确度高;
      4.对异常值不敏感。

  • 缺点:

      1.计算量大;
      2.样本不均衡的问题;
      3.需要大量的内存。

  • 适用场景:需要一个好解释的模型的时候。

三、朴素贝叶斯(NB)

  • 条件概率:

  • 全概率:

  • 贝叶斯公式:

  • 优点:

      1.朴素贝叶斯起源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;
      2.对小规模的数据表现很好,能进行多分类;
      3.对缺失值不敏感,算法简单。

  • 缺点:

      1.需要计算先验概率;
      2.对特征间强相关的模型分类效果不好。

  • 适用场景:容易解释,不同维度之间相关性小的模型,不计后果的前提下可以处理高维数据。

四、逻辑回归(LR)

  • 核心:

  • 优点:

      1.实现简单,广泛应用于工业上;
      2.分类时计算量非常小,速度很快,存储资源少;
      3.可观测样本的概率分数。

  • 缺点:

      1.特征空间很大时,性能不是很好;
      2.容易前拟合,一般准确度不高;
      3.只能处理二分类线性可分问题。

  • 适用场景:很多分类算法的基础组件;用于分析单一因素对某一事件发生的影响因素;用于预测事件发生的概率。

五、支持向量机(SVM)

  • 核心:找到不同类别之间的分类面,使得两类样本尽量落在面的两边,且离分类面尽量远。
  • 优点:

      1.可以解决高维问题,即大型特征空间;
      2.能够处理非线性特征的相互作用;
      3.无需依赖整个数据。

  • 缺点:

      1.当观测样本很多的时候,效率不是很高;
      2.对非线性问题没有通用的解决方案,很难找到一个合适的核函数;
      3.对缺失数据敏感。

  • 适用场景:在很多数据集上都有优秀的表现,拿到数据就可以尝试一下SVM(高维数据注意核函数的选择)。

六、决策树(DT)

 

  • 核心:信息增益;信息增益比;Gini系数。
  • 优点:

      1.计算简单,易于理解,可解释行强;
      2.比较适合有缺失属性的样本;
      3.能够处理不相关的特征;
      4.在短时间内可以对大型数据做出好的结果。

  • 缺点:

      1.容易发生过拟合;
      2.易被攻击;
      3.忽略了数据之间的相关性;
      4.各个类别样本数量不一致的数据,信息增益偏向具有更多数值的特征。

  • 适用场景:常作为一些算法的基石;它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。

七、随机森林(RF)

 

  • 核心:两个随机(随机选取训练样本,随机选取特征),由决策树形成。
  • 优点:

      1.可以解决分类和回归问题;
      2.抗过拟合能力强;
      3.稳定性强。

  • 缺点:

      1.模型复杂;
      2.计算成本高;
      3.计算时间长。

  • 适用场景:数据维度相对低(几十维),同时对准确性有较高的要求;使用随机森林时,不需要调节很多的参数就可以达到很好的效果,所以不知道用什么方法时可以尝试一下。

八、GBDT

  • 原理:计算树的伪残差,通过前一棵树的残差拟合下一棵树,最终进行残差的加和。
  • 优点:

      1.预测精度高;
      2.适合低维数据;
      3.能处理非线性数据;
      4.可以灵活处理各种类型的数据,包括连续值和离散值;
      5.在相对少的调参时间情况下,预测的准备率也可以比较高。

  • 缺点:

      1.由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行;
      2.如果数据维度较高时会加大算法的计算复杂度。

  • 适用场景:不知道用什么模型时候可以使用的回归/分类模型

九、XGBoost

  • 原理:通过计算伪残差,计算加和(同GBDT)。
  • 对比GBDT的改进(优点继承):

     1.传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑回归(分类问题)或者线性回归(回归问题)。
     2.传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数(能自定义损失函数)。
     3.gboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。正则项降低了模型的复杂度,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。

  • 适用场景:各种比赛的大杀器,不知道用什么模型时候可以使用的回归/分类模型

十、K-Means

  • 原理:物以类聚,人以群分
  • 优点:

      1. 原理简单,容易实现 
      2. 内存占用小

  • 缺点:

      1. K值需要预先给定,属于预先知识,很多情况下K值的估计是非常困难的,对于像计算全部微信用 户的交往圈这样的场景就完全的没办法用K-Means进行。
      2. K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同(K-Means++)。
      3. K均值算法并不适合所有的数据类型。
      4. 对离群点的数据进行聚类时,K均值也有问题,这种情况下,离群点检测和删除有很大的帮助。

  • 适用场景:没有明确标签的情况下,我们经常用聚类模型来进行操作。

有关十大常用机器学习算法总结(持续完善)的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  3. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  4. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  5. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  6. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  7. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  8. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  9. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  10. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

随机推荐