diyaxu88 发表于 2023-10-4 20:06:05

常用的机器学习算法比较?

常用的机器学习算法比较?

拒绝泳游的魚 发表于 2023-10-4 20:06:12

在机器学习的世界里,如果按照学习方式来区分,可以认为存在着四大门派:监督学习、无监督学习(归纳性学习)、半监督学习、强化学习。
四大门派中,监督学习和无监督学习占据绝对的统治地位,半监督学习博取两家之长,而强化学习,则是类似于逍遥派那种传说中的存在。
我们所熟知的各种算法,其实便分属于这四大门派之中,接下来我们一一讨论。
一、监督学习
我特意画了一张图,让这个概念变得更加可视化。
比如我们有一组猫猫狗狗的图片,把它们作为输入数据放进某种算法之中,但是事先,我们已经帮这些图片分别打上了Cat或Dog的正确标签。
通过努力的训练,算法终于找到了“图片”和“标签”之间的“神秘关系”,而我们,则收获了一个能够分辨猫狗图片的“已训练”模型(Trained Model)。
这个时候,我们把一张“陌生”的图片喂给模型,它就能准确的告诉我们这张图片到底是猫还是狗。

http://picx.zhimg.com/v2-af39ec6a711e417f7f074e9a62203a8a_r.jpg?source=1940ef5c
在输入数据与标签之间建立“神秘关系”的方式,就被称为算法。
比如最简单的线性回归,稍稍进阶的多项式回归,更加强大的支持向量机和人工神经网络等等,这些我在上一篇文章里有过比较详细的介绍:
机器学习中的回归算法有哪些,各有何优劣?此外,监督学习中常用的算法还有:
决策树

http://picx.zhimg.com/v2-08536badd212d39f6e6d427cf1969091_r.jpg?source=1940ef5c
随机森林

http://picx.zhimg.com/v2-a9232a588e443296f2018ee7a17f4cf5_r.jpg?source=1940ef5c
XGBoost

http://picx.zhimg.com/v2-2509c400813c1fe2b8e5879a06562ed4_r.jpg?source=1940ef5c
这三种算法均使用“树”结构作为基础模型,都可被用于处理分类和回归问题,都可以提供输入变量的重要性排序,有利于明晰了解哪些变量起到决定性作用。但是,三者的复杂性、训练策略、对于缺失值的处理方式等,却又各有不同,需要根据实际情况选择恰当的模型进行应用。
随着这两年算力的不断提升,深度学习模型的风头逐渐强劲,其实它们很多也都属于监督学习的范畴之内。毕竟,再“深度”的模型,也逃不开“训练”这个耗时耗力,却又无比重要的过程。
无论是CNN、RNN、LSTM还是CNN-LSTM、ResNet,每一个炫酷的名称背后,其实都代表了一种复杂的算法。有些算法虽然只是在基础算法上进行了一些微调和改进,但是对于我们这些非专业码农来说,将其进行代码实现却并非易事。
多少次,看着顶会文章里的精妙算法两眼放光;多少次,对着并未开源的算法,自己一边揣摩代码,一边一把一把往下薅头发……
但是自从GPT更新到4.0后,大模型终于成长为一个靠谱的辅助程序猿。只要跟它说清楚基本算法以及改进的方向,它就会使尽浑身解数,努力帮助我们进行实现。
当然,过程并不是那样顺利的,在写代码期间,它会答非所问、会胡说八道、会bug频出……这种时候,就需要我们使用者拥有强大的prompt能力,能够百折不挠的调教大模型,最终得到心仪的可执行代码。「知乎知学堂」联合「AGI课堂」推出的【程序员的AI大模型进阶之旅】课程,邀请了圈内不同方向的大佬,帮助大家分析各个领域应用大模型时的侧重点,带着我们不用翻墙体验大模型的玄妙所在,两天的免费课程即可以让人收获颇丰。
毕竟不是所有需要使用代码的人都是编程大佬,我们这些半桶水的码农,或者刚入行的程序猿,未来对于大模型的依赖或许会特别强烈,提前了解和熟练应用,也算是为自己的未来发展提前引入强大助力。有了大模型,这些高大上的算法和它们最新的改良版本,你都可以轻松使用。
二、无监督学习
很明显,仅从名称就可以看出来,这种学习方式与监督学习完全不同。
同样使用猫猫狗狗的分类案例进行说明:

http://pic1.zhimg.com/v2-6c6b08191014deac8dd8575d34f5f028_r.jpg?source=1940ef5c
将猫猫狗狗的图片输入到无监督分类模型中,经过一番“神秘”的计算,模型掐指输出,这些图片长得不一样!根据特征可以分成两类,分别为第一类和第二类。
面对没见过的陌生图片,“已训练”模型可以坚定的告诉我们,这张图片属于第一类!
至于“第一类”和“第二类”分别是什么,毕竟它只是个模型,不是神,不可能在没有标签的情况下无中生有。
无监督学习同样包含很多算法,比如K均值算法、主成分分析法等等。其中K均值法随机选取K个中心点,代表K个类别,随后计算样本点和K个中心点之间的欧氏距离,通过反复迭代实现最终分类;主成分分析法则是通过线性变换,将数据变换到一个新的坐标系统中,其中数据投影的第一大方差为第一主成分,第二大方差为第二主成分……
最近应用较多的,则是一种基于神经网络的自编码器方法。输入数据经过“瓶颈层”后,特征得到了压缩和提取,输出的则是网络学习后的结果,是一组包含输入数据特征,却又与之完全不同的数据。

http://picx.zhimg.com/v2-483d22008ebbf02473691c1fa679de9c_r.jpg?source=1940ef5c
绝对不要小看非监督学习的神秘力量,要知道,ChatGPT其实就是非监督学习的产物哦!

http://pica.zhimg.com/v2-a17a073ee7c3981250036979999d0711_r.jpg?source=1940ef5c
三、半监督学习
顾名思义,半监督学习就是有一些标签,但是又不完全有,处于一种“既有”“又没有”的奇妙状态。
仍然以猫猫狗狗的分类为例:

http://picx.zhimg.com/v2-63288def57f656c65d096e3047f2ad03_r.jpg?source=1940ef5c
先利用数据集中的“有标签数据”进行模型训练,然后将“无标签数据”输入模型,得到预测结果,使这个“无标签数据”成为“有标签数据”,通过不断增加有标签的数据,提升模型的预测准确性。
当然,应用过程中存在很多问题,比如如何判别“无标签数据”的预测结果是真是假?有标签数据构建的模型本身存在过拟合怎么办?
我的意见是查文献和询问大模型:

http://pic1.zhimg.com/v2-139cbe39a868a4188c576d7ea298d461_r.jpg?source=1940ef5c
四、强化学习
与监督学习不同的是,强化学习不需要带标签的输入输出对,同时也无需对非最优解进行纠正。它的思路非常简单,以游戏为例,如果玩游戏时用到的某种策略取得了较高的的得分,那么就在之后的游戏中进一步“强化”这种策略,以期获得更好的成绩。
这种策略来源于心理学中的行为主义理论,认为有机体在环境给予的奖励或惩罚的刺激下,能够逐步形成对刺激的预期,从而逐步形成能够获得最大利益的习惯行为。
由于这种学习方法的构建过程比较繁杂,训练过程非常耗时,因此在我目前的研究过程中,极少使用。毕竟即使只是用强化学习进行超参寻优,也需要很长的时间,而且效果未必强于其他有监督学习方法。
但是,这不妨碍我向ChatGPT询问它的适用场景:

http://picx.zhimg.com/v2-ea3d4dbacc00b9c648c6c8a5f29f0490_r.jpg?source=1940ef5c
可以看到,强化学习的应用前景非常远大,无论是游戏、机器人、自动驾驶、航空航天,都已经开始出现它的身影,展现出强大的学习能力。
强化学习包括值迭代和策略迭代、Q-learning、State-Action-Reward-State-Action、Policy Gradient Methods、Actor-Critic Methods、Proximal Policy Optimization、Trust Region Policy Optimization、Monte Carlo Tree Search等一系列算法,并且仍在迅速发展的进程中,新的算法和技术不断涌现。
不管是监督学习还是非监督学习,亦或是强化学习还是未来出现的什么XX学习,有一点可以肯定,在各种“需求”的刺激下,机器学习的算法一定会不断发展、日新月异的。作为大数据从业者,“甲方爸爸”们各种稀奇古怪的要求中一定会有一条“使用最新最前沿技术”的咒语,这就需要萌新程序猿们及时了解和掌握最新的机器学习算法,而大模型,正是你最忠诚的助手和强大的武器,毕竟“双剑合璧”,才能“天下无敌”!

duck25 发表于 2023-10-4 20:06:53

全网最全的常用机器学习算法总结都在这里了,根据类别归类与比较如下:
线性回归算法

万字长文,演绎八种线性回归算法最强总结!回归算法

原理+代码,总结了 11 种回归模型聚类算法

理论+股市数据实战,总结了五种常用聚类分析算法分类算法

基于Python实现五大常用分类算法(原理+代码)集成分类

总结了九种机器学习集成分类算法(原理+代码)异常检测

理论结合实践,一文搞定异常检测技术超参数调节

又一个超参数优化神器:Scikit OptimizeOptuna vs Hyperopt 超参数优化哪家强?自动化超参数优化最强神器:Optuna

fly8.za.net 发表于 2023-10-4 20:07:03

各种机器学习算法都有自己适用的情况,这里举几个例子:
1、多层感知器
当特征只有几维、或者十几维,这时候比较适合才用多层感知器。

http://picx.zhimg.com/v2-4c27111df9bb22ae6bf01c27b2e7c7d1_r.jpg?source=1940ef5c

多层感知器

2、卷积神经网络
当特征的维度达到成千上万维,就适合才用卷积神经网络。

http://pic1.zhimg.com/v2-1c39338644047580a67894e3724c80d1_r.jpg?source=1940ef5c

卷积神经网络

3、残差收缩网络
当数据受到强烈的噪声干扰,残差收缩网络 就是比较合适的。

http://picx.zhimg.com/v2-93b4289edb9e041bcd480c0e5e15e66c_r.jpg?source=1940ef5c

(适用于强噪、高冗余数据的)残差收缩网络

如何写人工智能方面的sci?

fj520 发表于 2023-10-4 20:08:02

授人以鱼不如授人以渔,这篇文章会介绍如何通过“统计学检验”来对比机器学习算法性能。掌握了这个方法后,我们就不需要再人云亦云,而可以自己分析算法性能。
首先结论如下,在对比两个算法在多个数据集上的表现时:

[*]如果样本配对(paired)且符合正态分布,优先使用配对t检测(paired t test)。
[*]如果样本不符合正态分布,但符合配对,使用Wilcoxon Signed Ranks test。
[*]如果样本既不符合正态分布,也不符合配对,甚至样本量都不一样大,可以尝试Mann Whitney U test。值得注意的是,MW是用来处理独立测量(independent measures)数据,要分情况讨论,后文会深入分析。
在对比多个算法在多个数据集上的表现时:

[*]如果样本符合ANOVA(repeated measure)的假设(如正态、等方差),优先使用ANOVA。
[*]如果样本不符合ANOVA的假设,使用Friedman test配合Nemenyi test做post-hoc。
[*]如果样本量不一样,或因为特定原因不能使用Friedman-Nemenyi,可以尝试Kruskal Wallis配合Dunn's test。值得注意的是,这种方法是用来处理独立测量数据,要分情况讨论。
文章结构如下:(1-2) 算法对比的原因及陷阱 (3-4) 如何对比两个算法 (5-6)如何对比多个算法 (7)如何根据数据特性选择对比方法 (8)工具库介绍。
<hr/>1. 为什么需要对比算法性能?

统计学家George Box说过:“All models are wrong, but some are useful”(所有模型都是错误,只不过其中一部分是有价值的)。通俗来说,任何算法都有局限性,所以不存在“通用最优算法”,只有在特定情境下某种算法可能是渐进最优的。
因此,评估算法性能并选择最优算法是非常重要的。不幸的是,统计学评估还没有在机器学习领域普及,很多评估往往是在一个数据上的简单分析,因此证明效果有限。
2. 评估算法中的陷阱

首先我们常说的是要选择一个正确的评估标准,常见的有:准确率(accuracy)、召回率(recall)、精准率(precision)、ROC、Precision-Recall Curve、F1等。
选择评估标准取决于目的和数据集特性。在较为平衡的数据集上(各类数据近似相等的情况下),这些评估标准性能差别不大。而在数据严重倾斜的情况下,选择不适合的评估标准,如准确率,就会导致看起来很好,但实际无意义的结果。举个例子,假设某稀有血型的比例(2%),模型只需要预测全部样本为“非稀有血型”,那么准确率就高达98%,但毫无意义。在这种情况下,选择ROC或者精准率可能就更加适当。这方面的知识比较容易理解,很多科普书都有介绍,我们就不赘述了。
其次我们要正确理解测量方法,常见的有

[*]独立测量(independent measures):不同样本的观测对象是独立的,不存在关联
[*]重复测量(repeated measures):样本中使用的观测对象是相同的,仅仅是独立变量在上面的作用结果不同
[*]以及成对测量(matched pair):不同样本中采用不同的观测对象,但尽量使得样本间的观测对象成对相似
举个例子,我们想要分析刷知乎时间(每天3小时 vs. 每天10小时)对于大学生成绩的影响。如果我们使用相同的20个学生,观察他们每天3小时和10小时的区别,那就是重复测量。如果我们选择40个学生,分成两组每组20人,再分别观察那就是独立测量。如果我们先找20个学生,再找20个和他们非常相似的大学生,并配对观察,就是成对相似。
我们发现,当错误的理解测量方式时,就无法使用正确的统计学手段进行分析。
在这篇文章中我们默认:评估不同算法在多个相同数据集上的表现属于重复测量,而特例将会在第七部分讨论。同时,本文介绍的方法可以用于对比任何评估标准,如准确度、精准度等,本文中默认讨论准确度。
3. 两种算法间的比较:不恰当方法


http://picx.zhimg.com/50/v2-237321b60042d06ce188ef066ee86949_720w.jpg?source=1940ef5c

图1. 两种算法在14个数据集上的准确率

图1展示了两种决策树方法(C4.5,C4.5+m)在14个数据集上的准确率。那么该如何对比两种算法呢?先说几种错误(不恰当)的方法:
不恰当方法1:求每个算法在所有数据集上的均值,并比较大小。错误原因:我们对于算法在不同数据集上错误的期望不是相同的,因此求平均没有意义。换句话说,数据不符合相称性(commensurate)。
不恰当方法2:进行配对样本t检测(Paired t test)。显然,t test是统计学方法,可以用来查看两种方法在每个数据上的平均差值是否不等于0。但这个方法不合适原因有几点:

[*]和平均一样,不同数据集上的错误不符合相称性
[*]t-test要求样本符合正态分布,显然我们无法保证不同数据集上的准确率符合正态分布
[*]t-test对样本的大小有一定的要求,一般最低需要>30个样本。在这个例子中我们只有14个,且大部分情况下我们没有30个数据来做实验。
[*]因为缺乏相称性,统计结果易受到异常值影响(outliers)
不恰当方法3:符号检验(sign test)是一种无参数(non-parametric)的检验,优点是对于样本分布没有要求,不要求正态性。比较方法很简单,就是在每个数据集上看哪个算法更好,之后统计每个算法占优的数据集总数。以这个例子为例,C4.5在2个数据集上最优,2个平手,10个最差。如果我们对这个结果计算置信区间,发现p<0.05需要至少在11个数据集上表现最优。因此这个方法的缺点有:

[*]符号检验是一种非常弱的检验方法,仅对比优劣损失了大量信息,失去了定量信息(quantitative),比如 https://www.zhihu.com/equation?tex=0.1%3C0.9 和 https://www.zhihu.com/equation?tex=0.1%3C0.11 的意义是一样的。正因为如此,临界值(critical value)一般都需要很大,比如这个例子中的 https://www.zhihu.com/equation?tex=%5Calpha%3D0.05 的临界值是11(图2)。
[*]另一个问题是,因为缺乏定量信息,很多时候很难确定“优胜”是否来自随机性。举个例子,0.99<0.991是否真的代表算法A更好?一种看法是需要定义一个阈值,仅当差别大于阈值才能说明更好。然而这种看法的问题在于,假设算法A在1000个数据集上都以“微弱优势”胜过了B,那么我们是否需要怀疑显著性?因此,根本问题还是,符号检验需要大样本量才能得出显著性。

http://pic1.zhimg.com/v2-75c465377fe217998581a1cc194bae64_r.jpg?source=1940ef5c

图2. 符号检验的临界值表

4. 两种算法间的比较:推荐方法

考虑到通用性,我们需要使用非参数检验。换句话说,我们需要保证对样本的分布不做任何假设,这样更加通用。
方法1:Wilcoxon Signed Ranks Test(WS )是配对t检验的无参数版本,同样是分析成对数据的差值是否等于0,只不过是通过排名(rank)而已。换个角度看,我们也可以理解为符号检验的定量版本。优点如下:

[*]无参数,不要求样本符合正态分布
[*]符合数据相称性,虽然是定性的(与配对t检验相比)
[*]有一定的定量特性,即较大的差别对于最终结果影响更大(与符号检验相比)

http://pic1.zhimg.com/v2-c2c7489fd9162441e33f04ab9eae0a58_r.jpg?source=1940ef5c

图3. 两种算法在14个数据集上的准确率与排序

方法2(详见第七部分):Mann Whitney U test(MW)和WS一样,都是无参数的且研究排名的检验方法。MW有以下特性:

[*]可以用来检测不同的大小的样本,举例A算法在8个数据集上的表现 vs B算法在10个数据集上的表现。
[*]不存在配对性要求,参看上一点
[*]对比的是两个样本的分布,因此不同数据集的错误应该符合特定分布,可能不满足相称性
[*]对于测量方法的假设是:独立测量,这与我们的实际情况不符
换句话说,MW是当样本量不同时才建议勉强一试,因为不符合独立测量的假设。不同数据集的错误(准确率)不一定符合特定分布,很可能不符合相称性,但在特定情况下有用,详见第七部分。
总结:如果样本配对且符合正态分布,优先使用配对t检测。如果样本不符合正态分布,但符合配对,使用WS。如果样本既不符合正态分布,也不符合配对,可以尝试MW。
5. 多种算法间的比较:不恰当的方法


http://pica.zhimg.com/50/v2-9da7ac7b74148bd7f6cc0b711c8eed96_720w.jpg?source=1940ef5c

图4. 四种算法在14个数据集上的准确率与排序

图4提供了四种算法(C4.5,C4.5+m,C4.5+cf,C4.5+m+cf)在14个数据集上的准确率。
不恰当方法1:一种看法是,我们是否可以把两个算法的对比推广到多个算法上。假设有k个算法,我们是否可以对它们进行两两比较,经过 https://www.zhihu.com/equation?tex=%5Cfrac%7B%281%2B%28k-1%29%29%5Ctimes+%28k-1%29%7D%7B2%7D%3D%5Cfrac%7Bk%5E2-k%7D%7B2%7D 次计算得到一个矩阵。这个是经典的多元假设检验问题,这种穷举法一般都假设了不同对比之间的独立性,一般都不符合现实,需要进行校正,因此就不赘述了。
不恰当方法2:Repeated measures ANOVA是经典的统计学方法,用来进行多样本间的比较是,可以看做是t检验的多元推广。ANOVA不适合对比算法表现的原因如下:

[*]对样本分布有正态假设,然而不同数据集上的准确度往往不符合这个假设
[*]不同的样本有相同的总体方差(population variance)
不幸的是,我们想要对比的算法表现不符合这个情况,因此ANOVA不适合。
6. 多种算法间的比较:推荐的方法

我们需要找到一种方法同时解决第5部分中提到的问题,这个方法需要:

[*]非参数,不对数据的分布做出假设
[*]不需要,或者尽量不依赖,或者可以自动修正两两对比所带来的误差
Demšar 推荐了非参数的多元假设检验Friedman test。Friedman也是一种建立在排名(rank)上的检验,它假设所有样本的排序均值相等。具体来讲,我们首先给不同算法在每个数据集上排序,并最终计算算法A在所有数据集上排名的均值。如果所有算法都没有性能差别,那么它们的性能的平均排名应该是相等的,这样我们就可以选择特定的置信区间来判断差异是否显著了。
假设我们通过Friedman test发现有统计学显著(p<0.05),那么我们还需要继续做事后分析(post-hoc)。换句话说,Friedman test只能告诉我们算法间是否有显著差异,而不能告诉我们到底是哪些算法间有性能差异。想要定位具体的差异算法,还需要进行post-hoc分析。
Friedman test一般配套的post-hoc是Nemenyi test,Nemenyi test可以指出两两之间是否存在显著差异。我们一般还会对Nemenyi的结果可视化,比如下图。

http://picx.zhimg.com/v2-9c0c6b8b11f880cae21aa9d3d35e497a_r.jpg?source=1940ef5c

图5. Nemenyi对10种算法的对比结果,NS代表不显著

另一个值得提的是,即使Friedman证明算法性能有显著不同,Nemenyi不一定会说明到底是哪些算法间不同,原因是Nemenyi比Friedman要弱(weak),实在不行可以对必须分析的算法成对分析。
方法2(详见第七部分):和两两对比一样,在多个样本对比时也有一些特定情况导致我们不能使用Friedman-Nemenyi。另一个或许可以值得一试的无参数方法是Kruskal Wallis test搭配Dunn's test(作为post-hoc)。 这种方法的特点是:

[*]可以用来检验不同的大小的样本,举例A算法在8个数据集上的表现 vs B算法在10个数据集上的表现 vs C算法在20个数据集上的表现。
[*]对于测量方法的假设是:独立测量,这与我们的实际情况不符。
7. 再看重复测量和独立测量

我们在第二部分分析了重复测量与独立测量,而且假设机器学习性能的对比应该是建立在“重复测量”上的,也就是说所有的算法都在相同的数据集上进行评估。
在这种假设下,我们推荐了无参数的:Wilcoxon对两个算法进行比较, Friedman-Nemenyi对多个算法进行对比。
然而,“重复测量”的假设不一定为真。举个例子,如果我们只有一个数据,并从数据中采样(sample)得到了很多相关的测试集1, 2,3...n,并用于测试不同的算法。

[*]算法A:测试集1,2
[*]算法B:测试集3, 4,5,6
[*]算法N...
在这种情况下,我们就可以用Mann Whitney U test对比两种算法,Kruskal-Dunn对比多种算法。而且值得注意的是,这种情况常见于人工合成的数据,比如从高斯分布中采样得到数据。因此,要特别分析数据的测量方式,再决定如何评估。
8. 工具库与实现

我们知道R上面有所有这些检验,着重谈谈Python上的工具库。幸运的是,上文提到所有检验方法在Python上都有工具库
Scipy Statistical functions :Wilcoxon,Friedman,Mann Whitney
scikit-posthocs:Nemenyi,Dunn's test
<hr/>文章的配图来自于 以及我的一篇paper ,接收后会补上reference。文章的思路和脉络基于,建议阅读。主要着力于特定情况,当重复测量失效时的检验。
Demšar, J., 2006. Statistical comparisons of classifiers over multiple data sets. Journal of Machine learning research, 7(Jan), pp.1-30.
To complete.

allyescc 发表于 2023-10-4 20:08:59

1.算法性能比较
JMLR 2014 10月刊有一篇神文:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems? 测试了179种分类模型在UCI所有的121个数据上的性能,发现Random Forests 和 SVM (高斯核,用LibSVM版本)性能最好。Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?这个东西是前段时间在
@刘知远微博上看到的
Sina Visitor System,JMLR是机器学习领域的顶级期刊。
2.算法的review
这篇东西对一些监督学习算法做了review.
https://s3-us-west-2.amazonaws.com/mlsurveys/54.pdf文末有张表格。比较了各种算法的性质。

http://pic1.zhimg.com/77f3527d0bdb4add7f97291f1fda9101_r.jpg?source=1940ef5c
3.算法选择
除此之外,给你贴张图,供你选择机器学习算法用。

http://picx.zhimg.com/109c762828a894c741b82c6d9eb752a9_r.jpg?source=1940ef5c
页: [1]
查看完整版本: 常用的机器学习算法比较?