【一文速通】各种机器学习算法的特点及应用场景

news2024/11/28 4:42:09

近邻 (Nearest Neighbor)

KNN算法的核心思想是,如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。KNN方法在类别决策时,只与极少量的相邻样本有关。

适用情景:

由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合

贝叶斯 (Bayesian)

优点:

  1. 对待预测样本进行预测,过程简单速度快(想想邮件分类的问题,预测就是分词后进行概率乘积,在log域直接做加法更快)。

  1. 对于多分类问题也同样很有效,复杂度也不会有大程度上升。

  1. 在分布独立这个假设成立的情况下,贝叶斯分类器效果奇好,会略胜于逻辑回归,同时我们需要的样本量也更少一点

  1. 对于类别类的输入特征变量,效果非常好。对于数值型变量特征,我们是默认它符合正态分布的。

缺点:

  1. 对于测试集中的一个类别变量特征,如果在训练集里没见过,直接算的话概率就是0了,预测功能就失效了。当然,我们前面的文章提过我们有一种技术叫做『平滑』操作,可以缓解这个问题,最常见的平滑技术是拉普拉斯估测。

  1. 那个…咳咳,朴素贝叶斯算出的概率结果,比较大小还凑合,实际物理含义…恩,别太当真。

  1. 朴素贝叶斯有分布独立的假设前提,而现实生活中这些predictor很难是完全独立的

使用Tips:

  • 大家也知道,很多特征是连续数值型的,但是它们不一定服从正态分布,一定要想办法把它们变换调整成满足正态分布!!

  • 对测试数据中的0频次项,一定要记得平滑,简单一点可以用『拉普拉斯平滑』。

  • 先处理处理特征,把相关特征去掉,因为高相关度的2个特征在模型中相当于发挥了2次作用。

  • 朴素贝叶斯分类器一般可调参数比较少,比如scikit-learn中的朴素贝叶斯只有拉普拉斯平滑因子alpha,类别先验概率class_prior和预算数据类别先验fit_prior。模型端可做的事情不如其他模型多,因此我们还是集中精力进行数据的预处理,以及特征的选择吧。

  • 那个,一般其他的模型(像logistic regression,SVM等)做完之后,我们都可以尝试一下bagging和boosting等融合增强方法。咳咳,很可惜,对朴素贝叶斯里这些方法都没啥用。原因?原因是这些融合方法本质上是减少过拟合,减少variance的。朴素贝叶斯是没有variance可以减小。

  • 朴素贝叶斯训练/建模

理论干货和注意点都说完了,来提提怎么快速用朴素贝叶斯训练模型吧。博主一直提倡要站在巨人的肩膀上编程(其实就是懒…同时一直很担忧写出来的代码的健壮性…),咳咳,我们又很自然地把scikit-learn拿过来了。scikit-learn里面有3种不同类型的朴素贝叶斯:

  • 高斯分布型:用于classification问题,假定属性/特征是服从正态分布的。

  • 多项式型:用于离散值模型里。比如文本分类问题里面我们提到过,我们不光看词语是否在文本中出现,也得看出现的次数。如果总词数为n,出现词数为m的话,说起来有点像掷骰子n次出现m次这个词的场景。

  • 伯努利型:这种情况下,就如之前博文里提到的bag of words处理方式一样,最后得到的特征只有0(没出现)和1(出现过)。

  • 根据你的数据集,可以选择scikit-learn中以上任意一种朴素贝叶斯,我们直接举个简单的例子,用高斯分布型朴素贝叶斯建模

适用情景:

需要一个比较容易解释,而且不同维度之间相关性较小的模型的时候。可以高效处理高维数据,虽然结果可能不尽如人意。

  • 文本分类/垃圾文本过滤/情感判别:这大概会朴素贝叶斯应用做多的地方了,即使在现在这种分类器层出不穷的年代,在文本分类场景中,朴素贝叶斯依旧坚挺地占据着一席之地。原因嘛,大家知道的,因为多分类很简单,同时在文本数据中,分布独立这个假设基本是成立的。而垃圾文本过滤(比如垃圾邮件识别)和情感分析(微博上的褒贬情绪)用朴素贝叶斯也通常能取得很好的效果。

  • 多分类实时预测:这个是不是不能叫做场景?对于文本相关的多分类实时预测,它因为上面提到的优点,被广泛应用,简单又高效。

  • 推荐系统:是的,你没听错,是用在推荐系统里!!朴素贝叶斯和协同过滤(Collaborative Filtering)是一对好搭档,协同过滤是强相关性,但是泛化能力略弱,朴素贝叶斯和协同过滤一起,能增强推荐的覆盖度和效果。

决策树 (Decision tree)

决策树的特点是它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。

优点:

建立决策树模型过程中比较简单,而且算法、决策规则很容易理解。采用决策树模型可以给用户提供可视化和直观化,全面掌握具体情况。决策树的应用范围比较广,无论是分类还是回归,都是可以使用决策树,同时还能根据类别进行不同的分类。决策树即可以处理数值型的样本,还能处理连续的样本

缺点:

决策树总是会在训练数据时,出现比较复杂的结构,就需要进行大量的过拟合。不过用户可以通过剪枝的方式,来缓解过拟合,例如限制树的高度,或者是规定叶子节点中的最少样本数量等等。

适用情景:

因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。

应用决策树决策方法必须具备以下条件:

(1)具有决策者期望达到的明确目标

(2)存在决策者可以选择的两个以上的可行的备选方案

(3)存在决策者无法控制的两个以上不确定因素

(4)不同方案在不同因素下的收益或损失可以计算出来

(5)决策者可以估计不确定因素发生的概率

受限于它的简单性,决策树更大的用处是作为一些更有用的算法的基石。

随机森林 (Random forest)

优点:

  • 由于采用了集成算法,本身精度比大多数单个算法要好

  • 在测试集上表现良好,由于两个随机性的引入,使得随机森林不容易陷入过拟合(样本随机,特征随机)

  • 在工业上,由于两个随机性的引入,使得随机森林具有一定的抗噪声能力,对比其他算法具有一定优势

  • 由于树的组合,使得随机森林可以处理非线性数据,本身属于非线性分类(拟合)模型

  • 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化

  • 训练速度快,可以运用在大规模数据集上

  • 可以处理缺省值(单独作为一类),不用额外处理

  • 由于有袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量

  • 在训练过程中,能够检测到feature间的互相影响,且可以得出feature的重要性,具有一定参考意义

  • 由于每棵树可以独立、同时生成,容易做成并行化方法

  • 由于实现简单、精度高、抗过拟合能力强,当面对非线性数据时,适于作为基准模型

缺点:

  • 当数据维度过多时,由于会对每个特征的每个值进行不纯度计算,所以效率会比单纯决策树要慢;

  • 无法给出连续的输出,生成的结果不会超出给定的训练集中结果的范围。

适用情景:

数据维度相对低(几十维),同时对准确性有较高要求时。因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。

既可以用于分类也可以用于回归问题,不适用于需要高实时的场景。

SVM (Support vector machine)

SVM的核心思想就是找到不同类别之间的分界面,使得两类样本尽量落在面的两边,而且离分界面尽量远。

最早的SVM是平面的,局限很大。但是利用核函数(kernel function),我们可以把平面投射(mapping)成曲面,进而大大提高SVM的适用范围。

适用情景:

SVM(支持向量机)主要用于分类问题,主要的应用场景有字符识别、面部识别、行人检测、文本分类等领域,在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别、分类(异常值检测)以及回归分析。

逻辑回归 (Logistic regression)

优点:

  • (模型)模型清晰,背后的概率推导经得住推敲。

  • (输出)输出值自然地落在0到1之间,并且有概率意义(逻辑回归的输出是概率么?https://www.jianshu.com/p/a8d6b40da0cf)。

  • (参数)参数代表每个特征对输出的影响,可解释性强。

  • (简单高效)实施简单,非常高效(计算量小、存储占用低),可以在大数据场景中使用。

  • (可扩展)可以使用online learning的方式更新轻松更新参数,不需要重新训练整个模型。

  • (过拟合)解决过拟合的方法很多,如L1、L2正则化。

  • (多重共线性)L2正则化就可以解决多重共线性问题。

缺点:

  • (特征相关情况)因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。

  • (特征空间)特征空间很大时,性能不好。

  • (精度)容易欠拟合,精度不高。

适用情景:

LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义

因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。 虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。

  • 用于分类:适合做很多分类算法的基础组件。

  • 用于预测:预测事件发生的概率(输出)。

  • 用于分析:单一因素对某一个事件发生的影响因素分析(特征参数值)。

  • 基本假设:输出类别服从伯努利二项分布。

  • 样本线性可分。

  • 特征空间不是很大的情况。

  • 不必在意特征间相关性的情景。

  • 后续会有大量新数据的情况。

判别分析 (Discriminant analysis)

判别分析主要是统计那边在用,所以我也不是很熟悉,临时找统计系的闺蜜补了补课。这里就现学现卖了。

判别分析的典型例子是线性判别分析(Linear discriminant analysis),简称LDA。(这里注意不要和隐含狄利克雷分布(Latent Dirichlet allocation)弄混,虽然都叫LDA但说的不是一件事。)LDA的核心思想是把高维的样本投射(project)到低维上,如果要分成两类,就投射到一维。要分三类就投射到二维平面上。这样的投射当然有很多种不同的方式,LDA投射的标准就是让同类的样本尽量靠近,而不同类的尽量分开。对于未来要预测的样本,用同样的方式投射之后就可以轻易地分辨类别了。

使用情景:

判别分析适用于高维数据需要降维的情况,自带降维功能使得我们能方便地观察样本分布。它的正确性有数学公式可以证明,所以同样是很经得住推敲的方式。

但是它的分类准确率往往不是很高,所以不是统计系的人就把它作为降维工具用吧。

同时注意它是假定样本成正态分布的,所以那种同心圆形的数据就不要尝试了。

神经网络 (Neural network)

优点:

  • 分类的准确度高;

  • 并行分布处理能力强,分布存储及学习能力强,

  • 对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系;

  • 具备联想记忆的功能。

缺点:

  • 神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;

  • 不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;

  • 学习时间过长,甚至可能达不到学习的目的。

使用情景:

数据量庞大,参数之间存在内在联系的时候。

当然现在神经网络不只是一个分类器,它还可以用来生成数据,用来做降维

提升算法(Boosting)

接下来讲的一系列模型,都属于集成学习算法(Ensemble Learning),基于一个核心理念:三个臭皮匠,顶个诸葛亮。

翻译过来就是:当我们把多个较弱的分类器结合起来的时候,它的结果会比一个强的分类器更典型的例子是AdaBoost。

AdaBoost的实现是一个渐进的过程,从一个最基础的分类器开始,每次寻找一个最能解决当前错误样本的分类器。用加权取和(weighted sum)的方式把这个新分类器结合进已有的分类器中。

它的好处是自带了特征选择(feature selection),只使用在训练集中发现有效的特征(feature)。这样就降低了分类时需要计算的特征数量,也在一定程度上解决了高维数据难以理解的问题。

最经典的AdaBoost实现中,它的每一个弱分类器其实就是一个决策树。这就是之前为什么说决策树是各种算法的基石。

使用情景:

好的Boosting算法,它的准确性不逊于随机森林。虽然在[1]的实验中只有一个挤进前十,但是实际使用中它还是很强的。因为自带特征选择(feature selection)所以对新手很友好,是一个“不知道用什么就试一下它吧”的算法。

装袋算法(Bagging)

同样是弱分类器组合的思路,相对于Boosting,其实Bagging更好理解。它首先随机地抽取训练集(training set),以之为基础训练多个弱分类器。然后通过取平均,或者投票(voting)的方式决定最终的分类结果。

因为它随机选取训练集的特点,Bagging可以一定程度上避免过渡拟合(overfit)。

在[1]中,最强的Bagging算法是基于SVM的。如果用定义不那么严格的话,随机森林也算是Bagging的一种。

使用情景:

相较于经典的必使算法,Bagging使用的人更少一些。一部分的原因是Bagging的效果和参数的选择关系比较大,用默认参数往往没有很好的效果。

虽然调对参数结果会比决策树和LR好,但是模型也变得复杂了,没事有特别的原因就别用它了。

对于稳定的模型来说,Bagging并不会工作地很好,而Boosting可得会有帮助。如果在训练集上有noisy数据,Boosting会很快地过拟合,降低模型的性能,而Bagging不存在这样地问题。
一句话总结:在实际应用中,Bagging通常都会有帮助,而Boosting是一把利剑,用好的情况下肯定会比Bagging出色,但是用不好很可能会伤到自己。

隐马尔科夫 (Hidden Markov model,HMM)

这是一个基于序列的预测方法,核心思想就是通过上一个(或几个)状态预测下一个状态。

之所以叫“隐”马尔科夫是因为它的设定是状态本身我们是看不到的,我们只能根据状态生成的结果序列来学习可能的状态。

适用场景:

可以用于序列的预测,可以用来生成序列。条件随机场 (Conditional random field)典型的例子是linear-chain CRF。

  1. HMM在语音中的应用
    (1)根据一些特征对部分语意块进行词语切分,然后计算各个词语或语义块的输出概率。
    (2)在给定的HMM模型下,用韦特比算法进行计算,求出状态序列,即语义块相关联的域,然后按关联结果抽取各语义项。

相对于语音的概率密度分布表示法,隐马尔科夫模型更能反映出语音的动态时序变化特性,特别是在建模过程中,可以有效结合语音的山下文相关性约束。

  1. HMM在人脸识别中的应用

HMM是用概率统计的方法来进行时序数据识别模拟的分类器。最早将HMM应用于人脸识别的文献根据人脸由上至下各个区域具有自然不变的顺序这一相似共性,即可用一个1D-HMM表示人脸。根据人脸水平方向也就有相对稳定的空间结构,因此可将沿垂直方向划分的状态分别扩充为一个1D-HMM,共同组成了2D-HMM。

  1. HMM在人脸表情识别中的应用

人脸表情识别的任务就在于通过表情图像来分析和建立HMM,对表情进行训练和识别


整理不易,且用且珍惜,希望大家点赞+收藏+评论,您的支持是我持续更新的动力~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文讲解Linux 设备模型 kobject,kset

设备驱动模型 面试的时候,有面试官会问,什么是Linux 设备驱动模型?你要怎么回答? 这个问题,突然这么一问,可能你会愣住不知道怎么回答,因为Linux 设备驱动模型是一个比较整体的概念&#xff0…

使用DDD指导业务设计的总结思考

领域驱动设计(DDD) 是 Eric Evans 提出的一种软件设计方法和思想,主要解决业务系统的设计和建模。DDD 有大量难以理解的概念,尤其是翻译的原因,某些词汇非常生涩,例如:模型、限界上下文、聚合、…

VHDL语言基础-时序逻辑电路-计数器

目录 计数器的设计: 计数器的作用: 计数器的实现: 1、用“”函数描述: 用T触发器级联构成的串行进位的二进制加法计数器的仿真波形: 计数器的仿真: 计数器的设计: 计数是一种最简单基本的…

将.js文件转成vue标签结构的样式

例如:下图所示: 依次识别获取.js文件中的tag和props,可以理解为字符串拼接,将整个vue的标签结构看作是一个字符串。 话不多说,先放上完整代码,思路看代码备注。(自己实现的时候,可以…

string的深浅拷贝问题

深浅拷贝问题引入浅拷贝深拷贝总结问题引入 对于一个普通的string类: class String { public:String(const char* str ""){//构造函数if (nullptr str)str "";_str new char[strlen(str) 1];strcpy(_str, str);}~String(){//析构函数if …

CSGO搬砖项目,23年最适合小白的项目!

大家好,我是阿阳 不懂的小伙伴,咱继续听我娓娓道来 steam搬砖主要涉及的是csgo游戏平台装备的一个搬运,比较很好理解,主要就是道具的搬运工,简单来讲就是,从国外steam游戏平台购买装备,再挂到…

几种实现主题切换的方式

几种实现主题切换的方式 1. 利用 prefers-color-scheme 特性 prefers-color-scheme是CSS 媒体特性【media】用于检测用户是否有将操作系统的主题色设置为亮色【light】或者暗色【dark】。 当前prefers-color-scheme新特性支持各大主流电脑(window和IOS系统&#…

今天面试招了个18K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-20k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试中,不…

Jenkins使用(代码拉取->编译构建->部署上线)

Jenkins简介 Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更重要的业务逻辑实现上。同时Jenkins能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用…

HRMS有什么特点?

当今企业的发展离不开技术支持,同样,在管理方面也需要与时俱进,进行数字化转型。人力资源技术的运用是企业管理数字换转型的重要表现之一。在企业选择一款HR软件之前,应该先认识到,什么是人力资源管理软件——即HRMS。…

midjournery AI绘画使用指南

midjournery AI绘画使用指南 基于Discord的Midjournery配置: https://www.bilibili.com/video/BV16d4y1A7Zq/?spm_id_from333.337.search-card.all.click&vd_source9c3ca9555620bed64bdee27ae49d37cf 使用原则 使用midjournery绘画的原则是给出对脑海中某个…

golang rabbitMQ 生产者复用channel以及生产者组分发策略

引用的是rabbitMQ官方示例的库:github.com/rabbitmq/amqp091-go在网络编程中我们知道tcp连接的创建、交互、销毁等相关操作的"代价"都是很高的,所以就要去实现如何复用这些连接,并要做到高效并可靠。预期效果:项目初始化…

论如何用python自动下载爱的妹子视频~嘿嘿嘿~

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 现在好看的妹子真的太多啦~ 如何一次性把这些好看的视频全保存下来捏? 开发环境: 版 本: python 3.8 编辑器: pycharm 2022.3.2 专业版 requests >>> pip install request…

【数据结构】复杂度讲解

目录 时间复杂度与空间复杂度:: 1.算法效率 2.时间复杂度 3.空间复杂度 4.常见时间复杂度以及复杂度OJ练习 时间复杂度与空间复杂度:: 什么是数据结构? 数据结构中是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关…

面向对象的设计模式

"万丈高楼平地起,7种模式打地基",模式是一种规范,我们应该站在巨人的肩膀上越看越远,接下来,让我们去仔细了解了解面向对象的7种设计模式7种设计模式设计原则的核心思想:找出应用中可能需要变化之…

24考研|高等数学的基础概念定理(二)——第二章|导数与微分

文章目录一、基础概念定理部分1.1 导数的四则运算法则1.2 反函数的求导法则1.3 复合函数的求导法则1.4 费马引理1.5 罗尔定理1.6 拉格朗日中值定理1.7 导数为零的结论1.8 柯西中值定理1.9 洛必达法则1.10 泰勒中值定理(定理1,定理2)1.11 导数…

CRM系统能给企业带来什么? CRM系统推荐

什么是CRM系统? CRM系统(又称客户关系管理系统)是一个以客户为核心的管理软件,能有效改善企业与现有客户的关系,且帮助企业寻找新的潜在客户,并赢回以前老客户。 CRM系统能给企业带来什么? C…

计算机视觉框架OpenMMLab开源学习(五):目标检测实战

目标检测实战 前言:本篇主要偏向目标检测实战部分,使用MMDetection工具进行代码应用,最后对水果进行检测实战演示,本次环境和代码配置部分省略,具体内容建议参考前一篇文章:计算机视觉框架OpenMMLab开源学…

基于STM32设计的避障寻迹小车

一、前言 1.1 项目背景 根据美国玩具协会在一项研究中,过去几年全球玩具销售增长与GDP的世界平均水平大致相同。但全球玩具市场的内部结构已经占据了巨大的位置变化:传统玩具的市场份额正在下降,高科技电子玩具正在蓬勃发展。全球玩具市场的…

迁移至其他美国主机商时需要考虑的因素

网站的可访问性是关系业务的关键因素之一。一个稳定、快速且优化良好的主机上的网站更有可能享受不间断的流量,并在谷歌的SERP中获得更好的排名。因此,在构建企业网站时,选择合适的主机商相当重要。不过就以美国主机为例,由于每个…