关于这个问题我今天正好看到了这个文章。讲的正是各个算法的优劣分析,很中肯。
https:// zhuanlan.zhihu.com/p/25 327755正好14年的时候有人做过一个实验[1],比较在不同数据集上(121个),不同的分类器(179个)的实际效果。
论文题为:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?
实验时间有点早,我尝试着结合我自己的理解、一些最近的实验,来谈一谈吧。主要针对分类器(Classifier)。
写给懒得看的人:
没有最好的分类器,只有最合适的分类器。
随机森林平均来说最强,但也只在9.9%的数据集上拿到了第一,优点是鲜有短板。
SVM的平均水平紧随其后,在10.7%的数据集上拿到第一。
神经网络(13.2%)和boosting(~9%)表现不错。
数据维度越高,随机森林就比AdaBoost强越多,但是整体不及SVM[2]。
数据量越大,神经网络就越强。
典型的例子是KNN,它的思路就是——对于待判断的点,找到离它最近的几个数据点,根据它们的类型决定待判断点的类型。
它的特点是完全跟着数据走,没有数学模型可言。
适用情景:
需要一个特别容易解释的模型的时候。
比如需要向用户解释原因的推荐算法。
典型的例子是Naive Bayes,核心思路是根据条件概率计算待判断点的类型。
是相对容易理解的一个模型,至今依然被垃圾邮件过滤器使用。
适用情景:
需要一个比较容易解释,而且不同维度之间相关性较小的模型的时候。
可以高效处理高维数据,虽然结果可能不尽如人意。
决策树的特点是它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。
虽然生成的树不容易给用户看,但是数据分析的时候,通过观察树的上层结构,能够对分类器的核心思路有一个直观的感受。
举个简单的例子,当我们预测一个孩子的身高的时候,决策树的第一层可能是这个孩子的性别。男生走左边的树进行进一步预测,女生则走右边的树。这就说明性别对身高有很强的影响。
适用情景:
因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。
同时它也是相对容易被攻击的分类器[3]。这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。
受限于它的简单性,决策树更大的用处是作为一些更有用的算法的基石。
提到决策树就不得不提随机森林。顾名思义,森林就是很多树。
严格来说,随机森林其实算是一种集成算法。它首先随机选取不同的特征(feature)和训练样本(training sample),生成大量的决策树,然后综合这些决策树的结果来进行最终的分类。
随机森林在现实分析中被大量使用,它相对于决策树,在准确性上有了很大的提升,同时一定程度上改善了决策树容易被攻击的特点。
适用情景:
数据维度相对低(几十维),同时对准确性有较高要求时。
因为不需要很多参数调整就可以达到不错的效果,基本上不知道用什么方法的时候都可以先试一下随机森林。
SVM的核心思想就是找到不同类别之间的分界面,使得两类样本尽量落在面的两边,而且离分界面尽量远。
最早的SVM是平面的,局限很大。但是利用核函数(kernel function),我们可以把平面投射(mapping)成曲面,进而大大提高SVM的适用范围。
提高之后的SVM同样被大量使用,在实际分类中展现了很优秀的正确率。
适用情景:
SVM在很多数据集上都有优秀的表现。
相对来说,SVM尽量保持与样本间距离的性质导致它抗攻击的能力更强。
和随机森林一样,这也是一个拿到数据就可以先尝试一下的算法。
逻辑斯蒂回归这个名字太诡异了,我就叫它LR吧,反正讨论的是分类器,也没有别的方法叫LR。顾名思义,它其实是回归类方法的一个变体。
回归方法的核心就是为函数找到最合适的参数,使得函数的值和样本的值最接近。例如线性回归(Linear regression)就是对于函数f(x)=ax+b,找到最合适的a,b。
LR拟合的就不是线性函数了,它拟合的是一个概率学中的函数,f(x)的值这时候就反映了样本属于这个类的概率。
适用情景:
LR同样是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。
因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。
虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。
判别分析主要是统计那边在用,所以我也不是很熟悉,临时找统计系的闺蜜补了补课。这里就现学现卖了。
判别分析的典型例子是线性判别分析(Linear discriminant analysis),简称LDA。
(这里注意不要和隐含狄利克雷分布(Latent Dirichlet allocation)弄混,虽然都叫LDA但说的不是一件事。)
LDA的核心思想是把高维的样本投射(project)到低维上,如果要分成两类,就投射到一维。要分三类就投射到二维平面上。这样的投射当然有很多种不同的方式,LDA投射的标准就是让同类的样本尽量靠近,而不同类的尽量分开。对于未来要预测的样本,用同样的方式投射之后就可以轻易地分辨类别了。
使用情景:
判别分析适用于高维数据需要降维的情况,自带降维功能使得我们能方便地观察样本分布。它的正确性有数学公式可以证明,所以同样是很经得住推敲的方式。
但是它的分类准确率往往不是很高,所以不是统计系的人就把它作为降维工具用吧。
同时注意它是假定样本成正态分布的,所以那种同心圆形的数据就不要尝试了。
神经网络现在是火得不行啊。它的核心思路是利用训练样本(training sample)来逐渐地完善参数。还是举个例子预测身高的例子,如果输入的特征中有一个是性别(1:男;0:女),而输出的特征是身高(1:高;0:矮)。那么当训练样本是一个个子高的男生的时候,在神经网络中,从“男”到“高”的路线就会被强化。同理,如果来了一个个子高的女生,那从“女”到“高”的路线就会被强化。
最终神经网络的哪些路线比较强,就由我们的样本所决定。
神经网络的优势在于,它可以有很多很多层。如果输入输出是直接连接的,那它和LR就没有什么区别。但是通过大量中间层的引入,它就能够捕捉很多输入特征之间的关系。卷积神经网络有很经典的不同层的可视化展示(visulization),我这里就不赘述了。
神经网络的提出其实很早了,但是它的准确率依赖于庞大的训练集,原本受限于计算机的速度,分类效果一直不如随机森林和SVM这种经典算法。
使用情景:
数据量庞大,参数之间存在内在联系的时候。
当然现在神经网络不只是一个分类器,它还可以用来生成数据,用来做降维,这些就不在这里讨论了。
这个我是真不熟,都不知道中文翻译是什么。
它里面典型的算法是C5.0 Rules,一个基于决策树的变体。因为决策树毕竟是树状结构,理解上还是有一定难度。所以它把决策树的结果提取出来,形成一个一个两三个条件组成的小规则。
使用情景:
它的准确度比决策树稍低,很少见人用。大概需要提供明确小规则来解释决定的时候才会用吧。
接下来讲的一系列模型,都属于集成学习算法(Ensemble Learning),基于一个核心理念:三个臭皮匠,顶个诸葛亮。
翻译过来就是:当我们把多个较弱的分类器结合起来的时候,它的结果会比一个强的分类器更
典型的例子是AdaBoost。
AdaBoost的实现是一个渐进的过程,从一个最基础的分类器开始,每次寻找一个最能解决当前错误样本的分类器。用加权取和(weighted sum)的方式把这个新分类器结合进已有的分类器中。
它的好处是自带了特征选择(feature selection),只使用在训练集中发现有效的特征(feature)。这样就降低了分类时需要计算的特征数量,也在一定程度上解决了高维数据难以理解的问题。
最经典的AdaBoost实现中,它的每一个弱分类器其实就是一个决策树。这就是之前为什么说决策树是各种算法的基石。
使用情景:
好的Boosting算法,它的准确性不逊于随机森林。虽然在[1]的实验中只有一个挤进前十,但是实际使用中它还是很强的。因为自带特征选择(feature selection)所以对新手很友好,是一个“不知道用什么就试一下它吧”的算法。
同样是弱分类器组合的思路,相对于Boosting,其实Bagging更好理解。它首先随机地抽取训练集(training set),以之为基础训练多个弱分类器。然后通过取平均,或者投票(voting)的方式决定最终的分类结果。
因为它随机选取训练集的特点,Bagging可以一定程度上避免过渡拟合(overfit)。
在[1]中,最强的Bagging算法是基于SVM的。如果用定义不那么严格的话,随机森林也算是Bagging的一种。
使用情景:
相较于经典的必使算法,Bagging使用的人更少一些。一部分的原因是Bagging的效果和参数的选择关系比较大,用默认参数往往没有很好的效果。
虽然调对参数结果会比决策树和LR好,但是模型也变得复杂了,没事有特别的原因就别用它了。
这个我是真不知道中文怎么说了。它所做的是在多个分类器的结果上,再套一个新的分类器。
这个新的分类器就基于弱分类器的分析结果,加上训练标签(training label)进行训练。一般这最后一层用的是LR。
Stacking在[1]里面的表现不好,可能是因为增加的一层分类器引入了更多的参数,也可能是因为有过渡拟合(overfit)的现象。
使用情景:
没事就别用了。
(修订:@庄岩 提醒说stacking在数据挖掘竞赛的网站kaggle上很火,相信参数调得好的话还是对结果能有帮助的。
http://blog.kaggle.com/2016/12/27/a-kagglers-guide-to-model-stacking-in-practice/
这篇文章很好地介绍了stacking的好处。在kaggle这种一点点提升就意味着名次不同的场合下,stacking还是很有效的,但是对于一般商用,它所带来的提升就很难值回额外的复杂度了。)
最近这个模型还挺流行的,主要是用来合并神经网络的分类结果。我也不是很熟,对神经网络感兴趣,而且训练集异质性(heterogeneity)比较强的话可以研究一下这个。
讲到这里分类器其实基本说完了。讲一下问题里面其他一些名词吧。
最大熵模型本身不是分类器,它一般是用来判断模型预测结果的好坏的。
对于它来说,分类器预测是相当于是:针对样本,给每个类一个出现概率。比如说样本的特征是:性别男。我的分类器可能就给出了下面这样一个概率:高(60%),矮(40%)。
而如果这个样本真的是高的,那我们就得了一个分数60%。最大熵模型的目标就是让这些分数的乘积尽量大。
LR其实就是使用最大熵模型作为优化目标的一个算法[4]。
就像最大熵模型一样,EM不是分类器,而是一个思路。很多算法都是基于这个思路实现的。
@刘奕驰 已经讲得很清楚了,我就不多说了。
这是一个基于序列的预测方法,核心思想就是通过上一个(或几个)状态预测下一个状态。
之所以叫“隐”马尔科夫是因为它的设定是状态本身我们是看不到的,我们只能根据状态生成的结果序列来学习可能的状态。
适用场景:
可以用于序列的预测,可以用来生成序列。
典型的例子是linear-chain CRF。
具体的使用 @Aron 有讲,我就不献丑了,因为我从来没用过这个。
就是这些啦。
相关的文章:
[1]: Do we need hundreds of classifiers to solve real world classification problems.
Fernández-Delgado, Manuel, et al. J. Mach. Learn. Res 15.1 (2014)
[2]: An empirical evaluation of supervised learning in high dimensions.
Rich Caruana, Nikos Karampatziakis, and Ainur Yessenalina. ICML '08
[3]: Man vs. Machine: Practical Adversarial Detection of Malicious Crowdsourcing Workers
Wang, G., Wang, T., Zheng, H., & Zhao, B. Y. Usenix Security'14
[4]: http://www.win-vector.com/dfiles/LogisticRegressionMaxEnt.pdf
最近在参加一个分类算法竞赛,也正好整理各个分类机器学习算法的简单介绍,应用场景和优缺点。资源来自网上和自己个人理解。
(因为都是这博主一块,那博主一块,有的是很久之前整理的,找不到原资源链接,如侵删)
--------------------------------继续更新中------------------------2020.11.24
一、逻辑回归模型
1、理解逻辑回归模型(LR)
逻辑回归是一种分类算法,其原理是将线性回归预测出来的数据映射到logit函数上,从而完成对事件发生概率的预测(最终输出预测标签0,1)。
2、逻辑回归模型的应用场景
LR是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。因为LR本质上是一个线性的分类器,所以处理不好特征之间相关的情况。
虽然预测效果一般,但胜在模型清洗,背后的概率学经得起推敲。它拟合出来的参数就代表了每一个特征对结果的影响。也是一个理解数据的好工具。
使用条件:当数据线性可分,特征空间不是很大的情况,不用在意新数据的情况,后续会有大量新数据的情况。
小结:
3、逻辑回归的优缺点
优点:
缺点:
二、树模型
1、理解树模型
决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选择下一比较分支,直至叶节点作为最终的决策结果
2、树模型的应用
树模型可以生成清晰的基于特征选择不同预测结构的树状结构,当你希望可以更好的理解手上的数据的时候往往可以使用决策树。同时它也是相对容易被供给的分类器(因为这里认为的改变一些特征,是的分类器判断错误。常见于垃圾邮件躲避检测中,因为决策树最终在底层的判断是基于单个条件,攻击者往往只需要改变很少的特征就可以躲过监测)。
小结:
3、树模型的优缺点
优点:
劣势:
三、集成模型
通过组合多个学习器来完成任务,通过集成方法,可以将多个弱学习器组合成一个强分类器,因此集成学习的泛化能力一般比单一分类器要好。
集成方法主要包括Bagging和Boosting,Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,最终得到不一样的效果。
常见的基于Bagging思想的集成模型有:随机森林、
基于Boosting思想的集成模型有:Adaboost、XgBoost、LightGBM等。
Bagging和Boosting的区别总结如下:
1、基于bagging思想的集成模型——随机森林模型
随机森林是一种集成算法。它首先随机选取不同的特征和训练样本,生成大量的决策树,然后综合这些决策树的结果来进行最终的分类。
随机森林在现实分析中被大量使用,相对于决策树,在准确性有了很大的额提升,同时一定程度上改善了决策树容易被攻击的特点。
随机森林的应用:
随机森林的优缺点:
优点:
缺点:
2、基于boosting思想的集成模型
XGBoost模型
XGBoost即梯度提升机器算法,其基本思想是把成百上千个分类准确率较低的树模型组合成一个准确率较高的模型,该模型不断迭代,每次迭代生成一颗新的树,如何在每一步生成合理的树是Boosting分类器的核心。
XGBoost模型的应用:
XGBoost的优缺点:
优点:
缺点:
LightGBM模型
LGB的应用场合:
LGB的优缺点:
优点:
缺点:
大神@xyzh已经答得很好了,而且我非常赞同他提到的"没有最好的分类器,只有最合适的分类器"这句话。
结合我自己在学习《机器学习实战》这本书的例子,用常见的数据来阐述各大机器学习算法的应用场景,作为大神答案的补充。回答中的不足之处,还请包含。
K 近邻(k Nearest Neighbor,kNN)是机器学习领域非常有效且易于掌握的算法。
以电影分类为例,目前有6个电影,每个电影有两个维度的信息(打斗镜头和接吻镜头)和一个标签(电影类型),现在有一个新的电影《复仇者联盟III》,在知道打斗镜头和接吻镜头的情况下,如何判断它的标签(电影类型)?
人类一眼就能够判断出《复仇者联盟III》属于动作片,因为它和其他三个动作片在打斗镜头和接吻镜头上有很大的相似性。
如何让计算机学习这种相似性呢?K 近邻算法是这么干的:
以打斗镜头的次数为x轴,以接吻镜头的次数为y轴,将以上7个电影都画在图上。
2. 计算机只能看懂数字,所以就算一算《妇联III》离其他几个电影到底有多近。
图像中的距离很容易计算,即x方向的差值平方加上y方向的差值平方,然后开方得到。下图就是《妇联III》距离每一个电影的距离,然后根据距离对他们进行排序。
3.统计排名前k的电影类型,即可判断出《妇联III》属于哪种电影。
根据前 K 个结果中,哪个电影类型占多数,判定当前电影的归类。当K 近邻算法中的 K = 3 时,根据排位结果,与《妇联III》最近的3个电影均为动作类电影,因此《妇联III》被判定为动作类电影。如果K = 4,从排位上来说动作类电影占3个,爱情类电影占1个,《妇联III》还是被判定为动作类电影。
以上即为K 近邻算法思路。现实世界中的很多分类问题都可以使用K 近邻算法,比如根据糖分、维生素等含量的高低对未知水果进行分类。
从K 近邻的计算过程可以看出,K 近邻算法虽然原理简单,但在实际应用时必须将所有数据进行存储,而且需要对数据集中的每个数据进行距离计算,非常消耗计算资源。所以k-近邻算法一般不会应用于复杂的分类问题。
K 近邻
优点:精度高、不太受到异常离散值的影响
缺点:需要大量存储空间、计算复杂度高
适用场景:少量数据和大量低维数据
决策树算法的思路与人类的思考过程十分相似。而且我们经常在编程中使用的if else语句其实就是决策树的一个子决策过程。
如下图所示,为一个假想的邮件分类决策树,其中方形框表示一个判断过程,椭圆形框表示一个判断结果。
决策时首先根据发送邮件的域名决定这封邮件是否在我的订阅列表中,如果不在,则归类为非订阅邮件;否则再根据是否包含“无人驾驶”关键词,将邮件分为需要查看的邮件和无需处理的垃圾邮件。
这个过程有两个决策条件,分别是域名是否在订阅列表中、是否包含“无人驾驶”关键词。这两个决策条件关联的数据特征分别是邮件的域名和邮件的关键词。
刚才提到邮件分类的粒子仅仅是一个简单且易于构建的决策树。而面对复杂的数据集时,需要解决的第一个问题就是,数据集中哪一个特征在划分数据分类时起决定性的作用。
以如下海洋生物数据为例:
数据出处:《机器学习实战》
首先将数据转换成及其可以理解的代码:
dataSet = [ [1, 1, 'yes'] [1, 1, 'yes'] [1, 0, 'no'] [0, 1, 'no'] [0, 1, 'no'] ]
labels = [ 'no surfacing', 'flippers' ]
观察以上数据,并不能立刻判断出是“不浮出水面是否可以生存”还是“是否有脚蹼”对“属于鱼类”的判断影响更大。所以选择第一个特征时遇到了困难。
信息论之父——克劳德·艾尔伍德·香农为量化度量信息提供的解决方案——信息熵。信息熵本身是一个比较复杂的概念,如果拿公式解释又需要花很多精力去理解。
信息熵反映了数据的复杂度,熵越高,混合的数据也越多。如果增加了某个特征导致熵值增加很大,那么这个特征的“影响力”就很大。
首先计算整组数据的信息熵E0,再计算去掉某个特征时,数据的信息熵Ei。得到各个特征导致的信息熵减少量,减少量最多的即为最为重要的特征。因此这个特征就是决策树的最顶层。继续重复之前的操作,找到决策树的第二层的特征。
根据信息熵的原理,可以知道,鱼类分类的决策树种,第一层分类特征为"no surfacing",第二层分类特征为"flippers"。因此决策树模型如下:
由此可见,决策树模型建立后,不再需要像K 近邻一样对整个数据集进行遍历计算,仅需完成特征的判断,即可实现分类。
决策树能够根据数据的各个特征,高效地对数据进行分类。一个好的决策树给出的结果往往可以匹敌在当前领域具有几十年工作经验的人类专家。
决策树的优缺点和适用场景
优点:计算复杂度不高,输出结果易于理解。
缺点:可能会产生过度匹配问题(输出的结果完全满足当前数据,但不具备普遍推广的价值)
适用场景:多维特征数据
持续更新~
备稿+绘图中...
你这么好看,一定很会点赞~
时间来到了2021年,神经网络从没人考虑,到现在已经开始独领风骚,各个领域,各个场景,NN都变得不可或缺。作为一个在各种数据和场景中摸爬滚打过的算法工程师,kaggle GrandMaster资深玩家,谈一谈自己的一些看法。
别光收藏不点赞呀,关注公告 包包算法笔记,更多精彩技术干货。
我们把这一些算法分分类,大体可以分为有监督和无监督。大部分回答也是集中在有监督的选型上,无监督确实在实际工作应用中,因为各种问题没有像有监督那样好施展拳脚。
我们抛开他们复杂的外衣,抽丝剥茧,找到他们应用的关键差异吧。没有最牛的算法,只有最合适的场景。
我还是出那道最经典的题目吧。
题目:请使用一个逻辑回归的模型,建模一个身材分类器,身材分偏胖和偏瘦两种,输入的特征有身高和体重。
数据集大概长这样:
我们从逻辑回归开始讲起,顺便引入一个贯穿全文非常关键的概念,非线性。
逻辑回归解决的方法就是我拍两个系数加权,使用 sigmoid(ax+by+c)就搞定了。LR建模的过程,就是学习到a b c 三个参数的过程。
LR在早期工业界,有着举足轻重的地位,你可能听说过凤巢上亿特征解决个性化广告的传说。
那大概是LR这辈子的高光时刻吧。他就是搞了上亿个这样的参数,然后算了个加权求和,通过sigmoid转化为概率。看起来这个模型,有多少人力,就有多少智能,非常接近人工智能的本质了,我只要能把特征搞出来,权重算出来,那问题不就迎刃而解了吗?
事实上,我们很难单纯地从身高和体重决策出一个人的身材,你说姚明体重280斤,他真的一定就胖吗??别忘了他身高有226公分的。
这组数据可能超出了你的认知,只看数据不看照片,一下子不好说他是胖还是瘦。(其实挺胖的哈哈)
嗯,这个你看到那组数据,不好一下子说出来的感觉,就是机器学习里面非常关键的概念,“非线性”。
这个问题不是那么好“线性“解决的,线性解决的意思就是我拍两个系数加权在原始特征x和y上,使用 sigmoid(ax+by+c)就搞定了。
解决的方法有两个:
1.升级模型,把线性的逻辑回归加上kernel来增加非线性的能力。我们使用这个模型 sigmoid(ax+by+kx*y^(-2)+c),这个模型通过多项式核方法的升级,解决了低维空间线性模型不太好解决的问题。
2.特征工程,掏出体检报告上的BMI指数,BMI=体重/(身高^2)。这样,通过BMI指数,就能非常显然地帮助我们,刻画一个人身材如何。甚至,你可以抛弃原始的体重和身高数据。
类似的问题还有朴素贝叶斯和SVM。
大家接触朴素贝叶斯估计都是从文本分类的任务开始的。教科书上非常常讲的垃圾邮件分类例子。
朴素贝叶斯作为经典的统计机器学习方法,根正苗红的贝叶斯原理的应用,是最最直观,最最朴素和最最快的算法。
还是用我上面讲的例子,朴素贝叶斯解决这个问题怎么做的呢?
我只需要算一个这样的贝叶斯公式就好了
p(类别|特征) = p(特征|类别)*p(类别)/p(特征)
特征就是身高、体重,类别就是身材。
最后三项,对应着用身高体重身材的等维度的统计概率,都是可以在数据集中统计出来的,贝叶斯模型训练的过程,就是算这些各种形式概率表达式的过程。这样,我就把预测变成了查表连乘的过程,查表是计算机中最快的操作,意味着他也是推断最快的模型。
朴素贝叶斯假设各特征之间的条件独立性,即
p(身高、体重|身材) = p(身高|身材)*p(体重|身材)
也由于他的过度简化,导致它几乎只在特定场景应用了,比如特别简单的文本分类就比较适合朴素贝叶斯。
支持向量机也是线性的模型。
SVM应该是学术界非常喜欢的模型,他有着分类器最美好的愿望,在特征空间里画一个平面,把样本点划分开,这个模型算是把可视化角度可解释性拉满了。
往往事与愿违,很多并不是线性可分的,你没办法简单的画一个超平面。你需要画一个很曲折的东西,才能把他们分好。
回到刚才的身材分类器的例子上,如果你没有BMI指数,和有BMI指数,SVM的超平面截然不同。
有BMI指数的话,我在一维度坐标轴上画一个点就能解决。
要是没有BMI指数的话。你也只能像LR那样,通过核方法来解决了。在方式一我们使用了核方法给这些模型升维,方式二使用了特征方法。
要知道天下没有免费的午餐,在你使用核方法升维的时候,实际很难精炼出恰好是x*y^(-2)这样的多项式表达,你肯定是一股脑地把x*y,x^2*y, x*y^2 这些项都扔进去了。
这么暴力的操作,有两个问题,一是共线性,二是噪声。
第一、共线性的意思是几个项表达的含义是趋同的,保持了很强的线性关系,对于逻辑回归是致命的问题,因为他带来了权重的不稳定,要知道逻辑回归权重可是暗示了特征重要性的。还会破坏朴素贝叶斯的基本假设。这些都是有副作用的。
(要是你对这段话,不好理解的话,仔细学习下逻辑回归模型和共线性的理论,此处不单独展开)
第二、噪声让你的分类器学习到了一些不好的东西,对你的决策没有产生泛化的贡献,反而带跑偏你的模型,学习到了一些不是知识的边边角角。
而有一些模型,他们天然可以解决这些问题。
典型的就像决策树和神经网络。
决策树的优点
1.天然的鲁棒性,能自动从异常点,缺失值学到信息。不需要归一化。直接上手一把梭哈。
2.树可以半自动化地完成一些特征非线性表达的工作,而且基于贪心切分+采样等抗过拟合手段,能比较好的挖掘数据的非线性。
3.树的可解释性很好,能生产特征重要性,帮助你理解数据,改善特征工程。一个经典的套路是思考topN特征背后的逻辑,并围绕他们进行特征工程。
NN模型也有一些天然的优点:
1.全自动化的特征工程和登峰造极的非线性表达能力,在数据表征范式统一,语义含义统一的稠密数据上(典型文本图像)上,NN一个打十个。另外,典型的像ID序列这种,人很难做出花来。也就是Bag of words或者借用embedding表达一下,还有一半是NN的功劳。
2.NN模型容量极大,在数据量的加持上,放大了1的优势。
但是看起来树模型的优点在其他模型也有,他们跟SVM和LR这些模型比又有啥区别呢?
1.第一,这些模型获取非线性的方式太粗暴了,有种大炮打蚊子的感觉。依靠kernel强行把VC维提高,带来的噪声特别多,有用信息很少。第二,kernal是有先验的,很容易被人设的参数带跑偏。这在实际业务数据中是非常致命的。
2.理论上LR+完美的特征工程可以很强,但是太难了,又不是人人都是特征工程大师。早期凤巢亿级特征跑LR效果特别好逐渐成为传说。
用表格看起来更清楚
这个图表达意思是,y轴是人的认知可解程度,对应着就是特征工程的难度和可行性。x轴是数据的非线性。
经常调侃的人工智能,就是有多少人工,就有多少智能,就是线性模型因人工特征工程发挥的空间。随着数据非线性的提高,特征工程难度的增大,LR线性模型的用武之地就越来越小。反而逐渐决策树,神经网络等非线性模型开始大展身手。
回到问题,这些模型使用的频率,大概也和各自的图中面积差不多一致了。神经网络在工业界,已经占据了半边天,决策树占据了剩下的绝大部分,还有一点点场景,因为特殊性,仍旧用着LR等模型。
【其他精彩回答】
在文本分类任务中,有哪些论文中很少提及却对性能有重要影响的tricks?
各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?
为什么在实际的kaggle比赛中,GBDT和Random Forest效果非常好?