推荐理由
对于机器学习算法的盘点,网上屡见不鲜。但目前,还没人能结合使用场景来把问题说明白,而这一点正是本文的目的所在。
在文章中,作者将结合他的实际经验,细致剖析每种算法在实践中的优势和不足。
本文的目的,是务实、简洁地盘点一番当前机器学习算法。尽管人们已做过不少盘点,但始终未能给出每一种算法的真正优缺点。在这里,我们依据实际使用中的经验,将对此详加讨论。
归类机器学习算法,一向都非常棘手,常见的分类标准是这样的:生成/判别、参数/非参数、监督/非监督,等等。
举例来说,Scikit-Learn 对算法的分类是根据它们的学习机制,由此所产生的类别如下:
广义线性模型
支持向量机
最近邻
决策树
神经网络
……
然而,根据我们的经验,这都不是最实用的算法分类方式。这是因为,在使用机器学习的时候,你不会这么去想:“我今天想训练一个支持向量机出来!”
相反,你一般是想着那个最终的目标,比如预测某个结果,或是将观察结果进行分类。
因而,我们想基于你的任务目标,来对机器学习算法进行分类。
天下没有免费的午餐
在机器学习领域,一个基本的定理就是“没有免费的午餐”。换言之,就是没有算法能完美地解决所有问题,尤其是对监督学习而言(例如预测建模)。
举例来说,你不能去说神经网络任何情况下都能比决策树更有优势,反之亦然。它们要受很多因素的影响,比如你的数据集的规模或结构。
其结果是,在用给定的测试集来评估性能并挑选算法时,你应当根据具体的问题来采用不同的算法。
当然,所选的算法必须要适用于你自己的问题,这就要求选择正确的机器学习任务。作为类比,如果你需要打扫房子,你可能会用到吸尘器、扫帚或是拖把,但你绝对不该掏出铲子来挖地。
机器学习的任务
这里,我们将首先讨论当前的「三大」最常见的机器学习任务:
1、回归(Regression)
2、分类(Classification)
3、聚类(Clustering)
以及两大数据降维(Dimensionality Reduction)问题:
4、特征选取(Feature Selection)
5、特征提取(Feature Extraction)
后续的文章,我们还将讨论密度估计(Density Estimation)和异常检测()的任务。
说明:本文将不讨论具体的细分领域,如自然语言处理。
本文也不会覆盖到每一个具体的算法。毕竟当前的算法数不胜数,而新的算法更是层出不穷。尽管如此,本文仍能针对每项任务给出当下最有代表性的算法。
▌1.回归
回归是一种用于连续型数值变量预测和建模的监督学习算法,使用案例包括房地产价格、股价走势或学生成绩等的预测。
回归任务的特征是具有数值型目标变量的标注数据集。换言之,每一个用以监督算法的观察样本,都有一个数值型真值。
线性回归
1.1 (正则化)线性回归
线性回归是回归任务最常用的算法。它最简的形式,是用一个连续的超平面来拟合数据集(比如,当你仅有两个变量时就用一条直线)。如果数据集内的变量存在线性关系,拟合程度就相当高。
在实践中,简单线性回归通常会被其正则化形式(LASSO、Ridge 及弹性网络)所取代。正则化是对过多回归系数所采取的一种避免过拟合的惩罚技巧,同时,惩罚的强度需要被平衡好。
优点:线性回归的理解和解释都非常直观,还能通过正则化来避免过拟合。此外,线性模型很容易通过随机梯度下降来更新数据模型。
缺点:线性回归在处理非线性关系时非常糟糕,在识别复杂的模式上也不够灵活,而添加正确的相互作用项或多项式又极为棘手且耗时。
实现:
Python -
scikit-learn.org/stable/modu…R -
1.2 回归树(集成方法)
回归树,又名决策树,通过将数据集重复分割成不同的分支来最大化每次分离的信息增益,从而让回归树很自然地学到非线性关系。
集成的方法,如随机森林(RF)或梯度提升树(GBM),则能结合许多独立训练树的预测。我们在这里不会详述其中的机制,但在实践中,随机森林一般都有很出色的表现,梯度提升树则较难调参,但往往能有更高的性能上限。
优点:决策树能学习非线性关系,对异常值也具有很强的稳健性。集成学习在实践中表现优异,经常赢得经典的(非深度学习)机器学习竞赛。
缺点:由于无约束,单棵树容易过拟合,这是因为单棵树可保留分支直至记住训练的数据。不够,集成方法可以弱化这一缺点。
实现:随机森林
Python -
scikit-learn.org/stable/modu…R -
cran.r-project.org/web/package…
实现:梯度提升树
Python -