《最实用的机器学习算法优缺点分析没有比这篇说得更好了.docx》由会员分享,可在线阅读,更多相关《最实用的机器学习算法优缺点分析没有比这篇说得更好了.docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、最实用的机器学习算法优缺点分析,没有比这篇说得更好了我们将从中挑选出20名相关性最高的幸运读者送出单场分论坛入场券。此外假如你想与所有参会大牛充分沟通沟通点击浏览原文购票使用优惠码AI2018-DBY购置两日通票立减999元此外大会还推出了1024定制票主会分会自由组合精彩随心。大会嘉宾阵容以及议题请查看文末海报对于机器学习算法的盘点网上屡见不鲜。但目前还没人能结合使用场景来把问题讲明白而这一点正是本文的目的所在。文中将结合他的实际经历细致剖析每种算法在理论中的优势以及缺乏。本文的目的是务实、简洁地盘点一番当前机器学习算法。尽管人们已做过不少盘点但始终未能给出每一种算法的真正优缺点。在这里我们
2、根据实际使用中的经历将对此详加讨论。归类机器学习算法一向都非常棘手常见的分类标准是这样的生成/判别、参数/非参数、监视/非监视等等。举例来讲Scikit-Learn对算法的分类是根据它们的学习机制由此所产生的类别如下广义线性模型支持向量机最近邻决策树神经网络然而根据我们的经历这都不是最实用的算法分类方式。这是因为在使用机器学习的时候你不会这么去想“我今天想训练一个支持向量机出来相反你一般是想着那个最终的目的比方预测某个结果或者是将观察结果进展分类。因此我们想基于你的任务目的来对机器学习算法进展分类。天下没有免费的午餐在机器学习领域一个根本的定理就是“没有免费的午餐。换言之就是没有算法能完美地解
3、决所有问题尤其是对监视学习而言例如预测建模。举例来讲你不能去讲神经网络任何情况下都能比决策树更有优势反之亦然。它们要受很多因素的影响比方你的数据集的规模或者构造。其结果是在用给定的测试集来评估性能并挑选算法时你应当根据详细的问题来采用不同的算法。当然所选的算法必需要适用于你自己的问题这就要求选择正确的机器学习任务。作为类比假如你需要清扫房子你可能会用到吸尘器、扫帚或者是拖把但你绝对不该掏出铲子来挖地。机器学习的任务这里我们将首先讨论当前的三大最常见的机器学习任务1、回归Regression2、分类Classification3、聚类Clustering和两大数据降维Dimensionality
4、Reduction问题4、特征选取FeatureSelection5、特征提取FeatureExtraction后续的文章我们还将讨论密度估计DensityEstimation以及异常检测的任务。讲明本文将不讨论详细的细分领域如自然语言处理。本文也不会覆盖到每一个详细的算法。毕竟当前的算法数不胜数而新的算法更是层出不穷。尽管如此本文仍能针对每项任务给出当下最有代表性的算法。1.回归回归是一种用于连续型数值变量预测以及建模的监视学习算法使用案例包括房地产价格、股价走势或者学生成绩等的预测。回归任务的特征是具有数值型目的变量的标注数据集。换言之每一个用以监视算法的观察样本都有一个数值型真值。线性回
5、归1.1正那么化线性回归线性回归是回归任务最常用的算法。它最简的形式是用一个连续的超平面来拟合数据集比方当你仅有两个变量时就用一条直线。假如数据集内的变量存在线性关系拟合程度就相当高。在理论中简单线性回归通常会被其正那么化形式LASSO、Ridge及弹性网络所取代。正那么化是对太多回归系数所采取的一种防止过拟合的惩罚技巧同时惩罚的强度需要被平衡好。优点线性回归的理解以及解释都非常直观还能通过正那么化来防止过拟合。此外线性模型很容易通过随机梯度下降来更新数据模型。缺点线性回归在处理非线性关系时非常糟糕在识别复杂的形式上也不够灵敏而添加正确的互相作用项或者多项式又极为棘手且耗时。实现Python-
6、:/scikit-learn.org/stable/modules/linear_model.htmlR-s:/cran.r-project.org/web/packages/glmnet/index.html1.2回归树集成方法回归树又名决策树通过将数据集重复分割成不同的分支来最大化每次别离的信息增益进而让回归树很自然地学到非线性关系。集成的方法如随机森林RF或者梯度提升树GBM那么能结合许多独立训练树的预测。我们在这里不会详述其中的机制但在理论中随机森林一般都有很出色的表现梯度提升树那么较难调参但往往能有更高的性能上限。优点决策树能学习非线性关系对异常值也具有很强的稳健性。集成学习在理论中
7、表现优异经常赢得经典的非深度学习机器学习竞赛。缺点由于无约束单棵树容易过拟合这是因为单棵树可保存分支直至记住训练的数据。不够集成方法可以弱化这一缺点。实现随机森林Python-:/scikit-learn.org/stable/modules/ensemble.html#random-forestsR-s:/cran.r-project.org/web/packages/randomForest/index.html实现梯度提升树Python-:/scikitlearn.org/stable/modules/ensemble.html#classificationR-s:/cran.r-pro
8、ject.org/web/packages/gbm/index.html1.3深度学习深度学习是指可以学习极端复杂形式的多层神经网络。它们在输入层以及输出层之间使用隐藏层来对数据的中间表征建模这一点是其他算法很难做到的。深度学习还有几个重要的机制如卷积、漏失等这使该算法可以有效学习高维数据。然而相对于其他算法深度学习需要更多的数据来进展训练因为该模型需要估算更大数量级的参数。优点深度学习是当前特定领域的最先进技术如计算机视觉与语音识别。深度神经网络在图像、音频以及文本数据上表现优异也很容易通过反向传播算法来更新数据模型。它们的架构即层级的数量以及构造能适用于多种问题同时隐藏层还能降低算法对特征
9、工程的依赖。缺点深度学习算法往往不合适用于通用目的因为它们需要大量的数据。事实上对于经典的机器学习问题深度学习的表现并不比集成方法好。此外由于训练所需的密集型计算它们需要更多的专门知识才能进展调参如设定架构与超参数。实现Python-s:/keras.io/R-:/mxnet.io/1.4荣誉奖最近邻算法最近邻算法是“基于实例的也就意味着它需要保存每一个训练观察值。最近邻算法通过搜寻最相似的训练样本来预测新样本的观察值。它是内存密集型算法处理高维数据时的效果并不理想同时还需要高效的间隔函数来计算相似度。在理论中使用正那么化的回归或者树型集成方法通常是更好的选择。2.分类分类是一种用于分类变量建
10、模及预测的监视学习算法使用案例包括员工流失、邮件过滤、金融欺诈等的预测。正如你所见许多回归算法都有其对应的分类形式分类算法往往适用于类别或者其可能性的预测而非数值。逻辑回归2.1正那么化逻辑回归逻辑回归是线性回归所对应的分类方法根本概念由线性回归推导而出。逻辑回归通过逻辑函数将预测映射到0到1的区间因此预测值可被视为某一类别的概率。该模型照旧是线性的只有当数据线性可分时例如数据可被某决策平面完全别离这一算法才会有很好的表现。逻辑回归同样能惩罚模型系数以进展正那么化。优点输出结果会有很好的概率解释而算法也能通过正那么化以防止过拟合。逻辑模型很容易通过随机梯度下降来更新数据模型。缺点逻辑回归在面对
11、多元或者非线性决策边界时性能较差。实现Python-:/scikit-learn.org/stable/modules/linear_model.html#logistic-regressionR-s:/cran.r-project.org/web/packages/glmnet/index.html2.2分类树集成方法对应于回归树的分类算法是分类树。通常它们都是指决策树更为严谨的讲法是“分类回归树CART也就是非常有名的CART算法。优点跟回归方法一样分类树的集成方法在理论中的表现同样特别优异。它们在应对异常数据时有着相当的稳健性与可扩展性。由于其层级构造分类树的集成方法可以很自然地对非线性
12、决策边界建模。缺点不可约束单棵树容易过拟合集成方法可削弱这一影响。实现随机森林Python-:/scikit-learn.org/stable/modules/ensemble.html#regressionR-s:/cran.r-project.org/web/packages/randomForest/index.html实现梯度提升树Python-:/scikitlearn.org/stable/modules/ensemble.html#classificationR-s:/cran.r-project.org/web/packages/gbm/index.html2.3深度学习深度学
13、习同样很容易适应于分类问题。实际上深度学习应用地更多的是分类任务如图像分类等。优点深度学习非常合适于音频、文本与图像数据的分类。缺点与回归方法一样深度神经网络需要大量的数据进展训练所以也不是一个通用目的算法。实现Python-s:/keras.io/R-:/mxnet.io/2.4支持向量机支持向量机使用一个名为核函数的技巧来将非线性问题变换为线性问题其本质是计算两个观测数据的间隔。支持向量机算法所寻找的是可以最大化样本间隔的决策边界因此又被称为大间距分类器。举例来讲使用线性核函数的支持向量机类似于逻辑回归但更具稳健性。因此在理论中支持向量机最大用途是用非线性核函数来对非线性决策边界进展建模。
14、优点支持向量机能对非线性决策边界建模又有许多可选的核函数。在面对过拟合时支持向量机有着极强的稳健性尤其是在高维空间中。缺点不过支持向量机是内存密集型算法选择正确的核函数就需要相当的j技巧不太适用较大的数据集。在当前的业界应用中随机森林的表现往往要优于支持向量机。实现Python-:/scikit-learn.org/stable/modules/svm.html#classificationR-s:/cran.r-project.org/web/packages/kernlab/index.html2.5朴素贝叶斯朴素贝叶斯是一种基于条件概率以及计数的简单算法其本质是一个概率表通过训练数据来更
15、新其中的概率。它预测新观察值的经过就是根据样本的特征值在概率表中来寻找最为可能的类别。被称为“朴素原因是其核心的特征条件独立性假设例如每一项输入特征都互相独立在现实中几乎是不成立的。优点即便条件独立性假设很难成立但理论中的朴素贝叶斯算法却能表现得很好。该算法易于实现且能伴随数据集更新。缺点因为朴素贝叶斯的算法太过简单所以很容易被上述分类算法所取代。实现Python-:/scikit-learn.org/stable/modules/naive_bayes.htmlR-htps:/cran.r-project.org/web/packages/naivebayes/index.html3.聚类聚
16、类是基于数据内部构造来寻找样本自然族群集群的无监视学习任务使用案例包括用户画像、电商物品聚类、社交网络分析等。由于聚类属于无监视学习也就不会输出“正确的答案评价结果时往往要用到数据可视化。假如你需要“正确的答案亦即训练集中存在预标注的集群那么用分类算法会更加适宜。K均值3.1K均值K均值是基于样本点间的几何间隔来度量聚类的通用目的算法。由于集群围绕在聚类中心结果会接近于球状并具有相似的大小。我们之所以推荐该算法给初学者是因为它不仅足够简单而且足够灵敏对于大多数问题都能给出合理的结果。优点K均值是最为流行的聚类算法因为它足够快速、足够简单假如你的预处理数据以及特征工程都做得特别有效那它将具备令人
17、惊叹的灵敏性。缺点该算法需要指定集群的数量而K值的选择通常都不是那么容易确定的。另外假如训练数据中的真实集群并不是类球状的那么K均值聚类会得出一些比拟差的集群。实现Python-:/scikit-learn.org/stable/modules/clustering.html#k-meansR-s:/stat.ethz.ch/R-manual/R-devel/library/stats/html/kmeans.html3.2仿射传播仿射传播是一种相对较新的聚类算法它基于两个样本点之间的图形间隔来确定集群其结果倾向于更小且大小不等的集群。优点仿射传播不需要指出明确的集群数量但需要指定“sampl
18、epreference以及“damping等超参数。缺点仿射传播的主要缺点是训练速度较慢且需要大量内存因此难于扩展到大数据集。此外该算法同样在假定潜在的集群要接近于球状。实现Python-:/scikit-learn.org/stable/modules/clustering.html#affinity-propagationR-s:/cran.r-project.org/web/packages/apcluster/index.html3.3分层/层次分层聚类又名层次聚类其算法基于以下概念来实现1)每一个集群都从一个数据点开场2)每一个集群都可基于一样的标准进展合并3)重复这一经过直至你仅剩
19、下一个集群这就获得了集群的层次构造。优点层次聚类的最主要优点是集群不再假定为类球形。此外它可以很容易扩展到大数据集。缺点类似于K均值该算法需要选定集群的数量即算法完成后所要保存的层次。实现Python-:/scikitlearn.org/stable/modules/clustering.html#hierarchical-clusteringR-s:/stat.ethz.ch/R-manual/R-devel/library/stats/html/hclust.html3.4DBSCANDBSCAN是一种基于密度的聚类算法它将样本点的密集区域组成集群其最新进展是HDBSCAN它允许集群的密度
20、可变。优点DBSCAN不需要假定类球形集群其性能可以扩展。此外它不需要每个点都被分配到集群中这就降低了集群的噪音。缺点用户必需要调整“epsilon以及“min_sample这两个超参数来定义集群密度。DBSCAN对此非常敏感。实现Python-:/scikit-learn.org/stable/modules/clustering.html#dbscanR-s:/cran.r-project.org/web/packages/dbscan/index.html维度灾难在机器学习领域“维度(Dimensionality)通常指数据集中的特征数量即输入变量的个数。当特征的个数十分大的时候相对于数
21、据集中观测样本的数量来讲训练出一个有效的模型对算法要求就会十分高(即用现有的算法训练出一个有效的模型十分困难)。这就是所谓的“维度灾难(CurseofDimensionality)十分是对依赖于间隔计算的聚类算法而言。对于“维度灾难有位Quora用户给出了一个非常好的类比假设有一条100码的直线而你在该直线的某处掉了一枚硬币。要找回硬币并不难你只需沿着这条线走就行了最多花上你2分钟时间。然后假设有一个长以及宽都是100码的广场而你是把硬币掉在广场的某个位置。如今再想找回它可就不容易了这好比在两个并排的足球场中找针可能会耗上你几天时间。再然后假设是一个长、宽、高都是100码的立方体那就好比是在3
22、0层楼高的大型体育场内找zhen找针随着维度的增加在空间中搜索的难度也会变得愈加困难。Quora链接s:/quora/What-is-the-curse-of-dimensionality/answer/Kevin-Lacker这就需要数据降维的方法特征选取以及特征提取。4.特征选取特征选取是从你的数据集中过滤掉不相关或者冗余的特征。特征选取与特征提取的关键区别在于特征选取是从原特征集中选取一个子特征集而特称提取那么是在原特征集的根底上重新构造出一些(一个或者多个)全新的特征。需要注意的是某些监视式机器学习算法已经具备了内在的特征选取机制比方正那么回归与随机森林。通常我们是建议一开场优先尝试这
23、些算法假如它们能匹配上你的问题的话。对此我们已经做过介绍。作为独立的任务特征选取既可以是非监视式的(如方差阈值)又可以是监视式的(比遗传算法)。有必要的话你还可以把多种方法以某种合理的方式整合在一起。4.1方差阈值方差阈值会摒弃掉观测样本那些观测值改变较小的特征(即它们的方差小于某个设定的阈值)。这样的特征的价值极小。举例来讲假如你有一份公共安康数据其中96%的人都是35岁的男性那么去掉“年度龄以及“性别的特征也不会损失重要信息。由于方差阈值依赖于特征值的数量级你应该对特征值先做归一化处理。优点使用方差阈值方式进展数据降维只需一个非常可靠的直觉特征值不怎么改变的特征不会带来什么有用的信息。这是
24、在你建模初期进展数据降维相对平安的一种方式。缺点假如你正在解决的问题并不需要进展数据降维即便使用了方差阈值也几乎没有什么作用。此外你需要手工设置、调整方差阈值这个经过相当具有技术含量。我们建议从一个保守(也就是较低)的阈值开场。实现Python-:/scikit-learn.org/stable/modules/generated/sklearn.feature_selection.VarianceThreshold.htmlR-s:/rdocumentation.org/packages/caret/versions/6.0-76/topics/nearZeroVar4.2相关性阈值相关性阈
25、值会去掉那些高度相关的特征(亦即这些特征的特征值变化与其他特征非常相似)。它们提供的是冗余信息。举例来讲假如你有一个房地产数据其中两个特征分别是“房屋面积单位平方英尺以及“房屋面积单位平方米那么你就可以去掉其中的任何一个这非常平安也不会给你的模型带来任何负面影响。问题是你该去掉哪一个特征呢首先你应该计算所有特征对的相关系数。而后假如某个特征对的相关系数大于设定的阈值那你就可以去掉其中平均绝对相关系数较大的那一个。优点使用相关性阈值同样只需一个可靠的直觉相似的特征提供了冗余的信息。对于某些含有强相关性特征较多的数据集有些算法的稳健性并不好因此去掉它们可以提升整个模型的性能(计算速度、模型准确度、
26、模型稳健性等等)。缺点同样你还是必须手动去设置、调整相关性阈值这同样是个棘手且复杂的经过。此外假如你设置的阈值过低那么你将会丧失掉一些有用的信息。无论在什么时候我们都更倾向于使用那些内置了特征选取的算法。对于没有内置特征提取的算法主成分分析是一个很好的备用方案。实现4.3遗传算法遗传算法是可用于不同任务的一大类算法的统称。它们受进化生物学与自然选择的启发结合变异与穿插在解空间内进展高效的遍历搜索。这里有一篇非常棒的简介“遗传算法背后的原理引入。在机器学习领域遗传算法主要有两大用途。其一用于最优化比方去找神经网络的最正确权重。其二是用于监视式特征提取。这一用例中“基因表示单个特征同时“有机体表示
27、候选特征集。“种群体内的每一个有机体都会基于其适应性进展评分正如在测试数据集上进展模型性能测试。最能适应环境的有机体将会生存下来并不断繁衍一直迭代直至最终收敛于某个最优的解决方案。优点在穷举搜索不可行的情况下对高维数据集使用遗传算法会相当有效。当你的算法需要预处理数据却没有内置的特征选取机制(如最近邻分类算法而你又必须保存最原始的特征(也就是不能用任何主成分分析算法)遗传算法就成了你最好的选择。这一情况在要求透明、可解释方案的商业环境下时有发生。缺点遗传算法为你解决方案的施行带来了更高的复杂度而多数情况下它们都是不必要的费事。假如可能的话主成分分析或者其它内置特征选取的算法将会更加高效以及简洁
28、。实现4.4荣誉奖逐步搜索逐步搜索是一个基于序列式搜索的监视式特征选取算法。它有两种形式前向搜索以及反向搜索。对于前向逐步搜索你从没有任何特征开场。接着从候选特征集中选择一个特征来训练模型然后保存模型性能最好对应的那个特征再往下你不断往训练模型的特征集中添加特征一次添加一个特征直到你模型的性能不再提升。反向逐步搜索的经过一样只不过顺序相反从把所有的特征都用于训练模型接着一次性移除一个特征直到模型的性能骤降。我们提及这一算法纯粹是源于某些历史原因。尽管很多教科书都把逐步搜索算法作为一个有效的方法但它所表现出来的性能总是不及其它监视式方法比方正那么化。逐步搜索有很多明显的缺陷最致命的一点就是它是一
29、个贪心算法无法面对将来变化的冲击。我们并不推荐这个算法。5.特征提取特征提取是用来创造一个新的、较小的特征集但仍能保存绝大局部有用的信息。值得再提的是特征选取是用来保存原始特征集中的一局部子特征集而特征提取那么是创造全新的特征集。跟特征选取一样某些算法内部已经具有了特征提取的机制。最好的案例就是深度学习它可以通过每一层隐神经层提取出越来越有用的能表征原始数据的特征。我们在“深度学习局部已给出相关的讲解。作为独立的任务特征提取可以是非监视式的(如主成分分析)或者监视式的(如线性判别分析)。5.1主成分分析主成分分析是一个非监视式算法它用来创造原始特征的线性组合。新创造出来的特征他们之间都是正交的
30、也就是没有关联性。详细来讲这些新特征是按它们本身变化程度的大小来进展排列的。第一个主成分代表了你的数据集中变化最为剧烈的特征第二个主成分代表了变化程度排在第二位的特征以此类推。因此你可以通过限制使用主成分的个数来到达数据降维的目的。例如你可以仅采用能使累积可解释方差为90%的主成分数量。你需要在使用主成分分析之前对数据进展归一化处理。否那么原始数据中特征值数量级最大的那个特征将会主导你新创造出来的主成分特征。优点主成分分析是一项多用处技术实用效果非常好。它部署起来快速、简单也就是讲你可以很方便地测试算法性能无论使用还是不使用主成分分析。此外主成分分析还有好几种变体以及扩展(如核主成分分析(ke
31、rnelPCA)稀疏主成分分析(sparsePCA)用以解决特定的问题。缺点新创造出来的主成分并不具备可解释性因此在某些情况下新特征与应用实际场景之间很难建立起联络。此外你仍然需要手动设置、调整累积可解释方差的阈值。实现5.2线性判别分析线性判别分析不是隐含狄利克雷分布它同样用来构造原始特征集的线性组合。但与主成分分析不同线性判别分析不会最大化可解释方差而是最大化类别间的别离程度。因此线性判别分析是一种监视式学习方式它必须使用有标记的数据集。那么线性判别分析与主成分分析到底哪种方法更好呢这要视详细的情况而定“没有免费的午餐原理在这里同样适用。线性判别分析同样依赖于特征值的数量级你同样需要先对特
32、征值做归一化处理。优点线性判别分析是一种监视式学习基于这种方式获取到的特征可以(但并不总是能)提升模型性能。此外线性判别分析还有一些变体(如二次线性判别分析)可用来解决特定的问题。缺点与主成分分析一样新创造出来的特征不具有可解释性。而且你同样要手动设置、调整需要保存的特征数量。线性判别分析需要已经标记好的数据因此这也让它更加接地气儿。实现5.3自编码机自编码机是一种人工神经网络它是用来重新构建原始输入的。例如图像自编码机是训练来重新表征原始数据的而非用以区分图片里面的小猫、小狗。但这有用吗这里的关键是在隐含层搭建比输入层以及输出层更少数量的神经元。这样隐含层就会不断学习怎样用更少的特征来表征原
33、始图像。因为是用输入图像来作为目的输出自编码机被视为无监视学习。它们可被直接使用如图像压缩或者按顺序堆叠使用如深度学习。优点自编码机是人工神经网络中的一种这表示它们对某些特定类型的数据表现会非常好比方图像以及语音数据。缺点自编码机是一种人工神经网络。这就是讲它们的优化需要更多的数据来进展训练。它们并不能作为一般意义上的数据降维算法来用。实现基于我们的经历以下是一些有用的建议练习练习练习。要找到一些数据集趁热打铁。解析这些算法只是一个开始掌握好它们就需要你不停地理论。掌握好根底。掌握这里算法能为你去运用机器学习打下坚实的根底因为其他所有的算法都是基于上述算法的一些变形。举例来讲先掌握主成分分析以及线性判别分析之前的区别而后再去学习线性判别分析的相关细节和二次线性判别分析之间的差异效果会更好。铁律好的数据远胜于花哨的算法。在机器学习应用领域算法总是可以交换的而有效的探究性分析、数据清洗与特征工程总是能大力提升你的结果。我们会经常提及这一点因为这就是该死的真相2018AI开发者大会只讲技术回绝空谈2018AI开发者大会是一场由中美人工智能技术高手联袂打造的AI技术与产业的年度度盛会是一场以技术落地为导向的干货会议大会设置了10场技术专题论坛力邀15硅谷实力讲师团以及80AI领军企业技术核心人物多位一线经历大咖带你将AI从云端落地。大会日程和嘉宾议题请查看下方海报点击查看大图
限制150内