机器学习算法选择

各类机器学习的应用场景分别是什么?例如,k近邻,贝叶斯,决策树,svm,逻辑斯蒂回归和最大熵模型。

k近邻,贝叶斯,决策树,svm,逻辑斯蒂回归和最大熵模型,隐马尔科夫,条件随机场,adaboost,em 这些在通常工做中,分别用到的频率多大?通常用…
 

关于这个问题我今天正好看到了这个文章。讲的正是各个算法的优劣分析,很中肯。html

正好14年的时候有人作过一个实验[1],比较在不一样数据集上(121个),不一样的分类器(179个)的实际效果。react

论文题为:Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?git

实验时间有点早,我尝试着结合我本身的理解、一些最近的实验,来谈一谈吧。主要针对分类器(Classifier)。程序员

写给懒得看的人:github

没有最好的分类器,只有最合适的分类器。

随机森林平均来讲最强,但也只在9.9%的数据集上拿到了第一,优势是鲜有短板。面试

SVM的平均水平紧随其后,在10.7%的数据集上拿到第一。算法

神经网络(13.2%)和boosting(~9%)表现不错。网络

数据维度越高,随机森林就比AdaBoost强越多,可是总体不及SVM[2]。session

数据量越大,神经网络就越强。app


近邻 (Nearest Neighbor)

典型的例子是KNN,它的思路就是——对于待判断的点,找到离它最近的几个数据点,根据它们的类型决定待判断点的类型。

它的特色是彻底跟着数据走,没有数学模型可言。


适用情景:

须要一个特别容易解释的模型的时候。

好比须要向用户解释缘由的推荐算法。


贝叶斯 (Bayesian)

典型的例子是Naive Bayes,核心思路是根据条件几率计算待判断点的类型。

是相对容易理解的一个模型,至今依然被垃圾邮件过滤器使用。


适用情景:

须要一个比较容易解释,并且不一样维度之间相关性较小的模型的时候。

能够高效处理高维数据,虽然结果可能不尽如人意。


决策树 (Decision tree)

决策树的特色是它老是在沿着特征作切分。随着层层递进,这个划分会愈来愈细。

虽然生成的树不容易给用户看,可是数据分析的时候,经过观察树的上层结构,可以对分类器的核心思路有一个直观的感觉。

举个简单的例子,当咱们预测一个孩子的身高的时候,决策树的第一层多是这个孩子的性别。男生走左边的树进行进一步预测,女生则走右边的树。这就说明性别对身高有很强的影响。


适用情景:

由于它可以生成清晰的基于特征(feature)选择不一样预测结果的树状结构,数据分析师但愿更好的理解手上的数据的时候每每可使用决策树。

同时它也是相对容易被攻击的分类器[3]。这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。由于决策树最终在底层判断是基于单个条件的,攻击者每每只须要改变不多的特征就能够逃过监测。

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


随机森林 (Random forest)

提到决策树就不得不提随机森林。顾名思义,森林就是不少树。

严格来讲,随机森林其实算是一种集成算法。它首先随机选取不一样的特征(feature)和训练样本(training sample),生成大量的决策树,而后综合这些决策树的结果来进行最终的分类。

随机森林在现实分析中被大量使用,它相对于决策树,在准确性上有了很大的提高,同时必定程度上改善了决策树容易被攻击的特色。


适用情景:

数据维度相对低(几十维),同时对准确性有较高要求时。

由于不须要不少参数调整就能够达到不错的效果,基本上不知道用什么方法的时候均可以先试一下随机森林。


SVM (Support vector machine)

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

最先的SVM是平面的,局限很大。可是利用核函数(kernel function),咱们能够把平面投射(mapping)成曲面,进而大大提升SVM的适用范围。

提升以后的SVM一样被大量使用,在实际分类中展示了很优秀的正确率。


适用情景:

SVM在不少数据集上都有优秀的表现。

相对来讲,SVM尽可能保持与样本间距离的性质致使它抗攻击的能力更强。

和随机森林同样,这也是一个拿到数据就能够先尝试一下的算法。


逻辑斯蒂回归 (Logistic regression)

逻辑斯蒂回归这个名字太诡异了,我就叫它LR吧,反正讨论的是分类器,也没有别的方法叫LR。顾名思义,它实际上是回归类方法的一个变体。

回归方法的核心就是为函数找到最合适的参数,使得函数的值和样本的值最接近。例如线性回归(Linear regression)就是对于函数f(x)=ax+b,找到最合适的a,b。

LR拟合的就不是线性函数了,它拟合的是一个几率学中的函数,f(x)的值这时候就反映了样本属于这个类的几率。


适用情景:

LR一样是不少分类算法的基础组件,它的好处是输出值天然地落在0到1之间,而且有几率意义。

由于它本质上是一个线性的分类器,因此处理很差特征之间相关的状况。

虽然效果通常,却胜在模型清晰,背后的几率学经得住推敲。它拟合出来的参数就表明了每个特征(feature)对结果的影响。也是一个理解数据的好工具。


判别分析 (Discriminant analysis)

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

判别分析的典型例子是线性判别分析(Linear discriminant analysis),简称LDA。

(这里注意不要和隐含狄利克雷分布(Latent Dirichlet allocation)弄混,虽然都叫LDA但说的不是一件事。)

LDA的核心思想是把高维的样本投射(project)到低维上,若是要分红两类,就投射到一维。要分三类就投射到二维平面上。这样的投射固然有不少种不一样的方式,LDA投射的标准就是让同类的样本尽可能靠近,而不一样类的尽可能分开。对于将来要预测的样本,用一样的方式投射以后就能够轻易地分辨类别了。


使用情景:

判别分析适用于高维数据须要降维的状况,自带降维功能使得咱们能方便地观察样本分布。它的正确性有数学公式能够证实,因此一样是很经得住推敲的方式。

可是它的分类准确率每每不是很高,因此不是统计系的人就把它做为降维工具用吧。

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


神经网络 (Neural network)

神经网络如今是火得不行啊。它的核心思路是利用训练样本(training sample)来逐渐地完善参数。仍是举个例子预测身高的例子,若是输入的特征中有一个是性别(1:男;0:女),而输出的特征是身高(1:高;0:矮)。那么当训练样本是一个个子高的男生的时候,在神经网络中,从“男”到“高”的路线就会被强化。同理,若是来了一个个子高的女生,那从“女”到“高”的路线就会被强化。

最终神经网络的哪些路线比较强,就由咱们的样本所决定。

神经网络的优点在于,它能够有不少不少层。若是输入输出是直接链接的,那它和LR就没有什么区别。可是经过大量中间层的引入,它就可以捕捉不少输入特征之间的关系。卷积神经网络有很经典的不一样层的可视化展现(visulization),我这里就不赘述了。

神经网络的提出其实很早了,可是它的准确率依赖于庞大的训练集,本来受限于计算机的速度,分类效果一直不如随机森林和SVM这种经典算法。


使用情景:

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

固然如今神经网络不仅是一个分类器,它还能够用来生成数据,用来作降维,这些就不在这里讨论了。


Rule-based methods

这个我是真不熟,都不知道中文翻译是什么。

它里面典型的算法是C5.0 Rules,一个基于决策树的变体。由于决策树毕竟是树状结构,理解上仍是有必定难度。因此它把决策树的结果提取出来,造成一个一个两三个条件组成的小规则。


使用情景:

它的准确度比决策树稍低,不多见人用。大概须要提供明确小规则来解释决定的时候才会用吧。


提高算法(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好,可是模型也变得复杂了,没事有特别的缘由就别用它了。


Stacking

这个我是真不知道中文怎么说了。它所作的是在多个分类器的结果上,再套一个新的分类器。

这个新的分类器就基于弱分类器的分析结果,加上训练标签(training label)进行训练。通常这最后一层用的是LR。

Stacking在[1]里面的表现很差,多是由于增长的一层分类器引入了更多的参数,也多是由于有过渡拟合(overfit)的现象。


使用情景:

没事就别用了。

(修订:

提醒说stacking在数据挖掘竞赛的网站kaggle上很火,相信参数调得好的话仍是对结果能有帮助的。

这篇文章很好地介绍了stacking的好处。在kaggle这种一点点提高就意味着名次不一样的场合下,stacking仍是颇有效的,可是对于通常商用,它所带来的提高就很难值回额外的复杂度了。)



多专家模型(Mixture of Experts)

最近这个模型还挺流行的,主要是用来合并神经网络的分类结果。我也不是很熟,对神经网络感兴趣,并且训练集异质性(heterogeneity)比较强的话能够研究一下这个。


讲到这里分类器其实基本说完了。讲一下问题里面其余一些名词吧。


最大熵模型 (Maximum entropy model)

最大熵模型自己不是分类器,它通常是用来判断模型预测结果的好坏的。

对于它来讲,分类器预测是至关因而:针对样本,给每一个类一个出现几率。好比说样本的特征是:性别男。个人分类器可能就给出了下面这样一个几率:高(60%),矮(40%)。

而若是这个样本真的是高的,那咱们就得了一个分数60%。最大熵模型的目标就是让这些分数的乘积尽可能大。

LR其实就是使用最大熵模型做为优化目标的一个算法[4]。


EM

就像最大熵模型同样,EM不是分类器,而是一个思路。不少算法都是基于这个思路实现的。

@刘奕驰 已经讲得很清楚了,我就很少说了。



隐马尔科夫 (Hidden Markov model)

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

之因此叫“隐”马尔科夫是由于它的设定是状态自己咱们是看不到的,咱们只能根据状态生成的结果序列来学习可能的状态。


适用场景:

能够用于序列的预测,能够用来生成序列。


条件随机场 (Conditional random field)

典型的例子是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]:

 
 
通常来讲Machine Learning主要有3种:
  1. Supervised Learning
  2. Semi-supervised Learning
  3. Unsupervised Learning

Supervised Learning适用与已知LABEL的状况.
Semi-supervised/Unsupervised Learning适用于有Latent Variable的状况.

题主提到的这些算法虽然常见,可是想真正的搞懂须要深刻了解(Calculus, Linear Algebra, Probabilistic).

好比SVM,为何叫Support Vector Machine, 为何SVM有Sparsity的特性, L1/L2 Regularizar起到了什么做用, 等等...
单单一个SVM就有太多的内容在里面了.
-----------------------------------------------------------------------------------------------
接下来回答问题:

k近邻,贝叶斯,决策树,svm,逻辑斯蒂回归和最大熵模型,隐马尔科夫,条件随机场,adaboost,em

首先:
Maximum Entropy和EM是理念.
Maximum Entropy的背后是信息论(Information Theory)和几率模型.
EM Model事实上对全部含有Latent Variable的模型均可以用.

kNN能够用于图像压缩.
可是,如何选取K, Similarity用什么, 都不是随便说应用就应用的...

Naive Bayes: 知名的 背后就有用,简单粗暴, 强大有效...
可是, NB算法如何Smooth,如何应对Online Setting,也不是那么简单...

SVM/Logistic Regression 均可以用于各类分类.
可是Hinge Loss和Sigmoid Function有什么区别, 何时用哪一个?

HMM/CRF NLP经常使用

Ada-boost 能够参考Netflix Prize,貌似大奖用了这个...具体不清楚
可是, Weak Learner是什么, Why boost works?

-----------------------------------------------------------------------------------------------
总结:
前几天Yann Lecun来咱们学校作了演讲, 而后咱们的老师回头总结,我以为颇有道理:
就是如今Deep Learning处于一个Scaling就是Accuracy的阶段,不少背后的缘由咱们其实都没有搞清楚. 例如, Deep Learning里用Max作Feature selection效果很好,可是Yann Lecun也只能猜想缘由.
因此真正的应用,取决于你动手去作, 去尝试.


最后:
推荐Andrew的公开课, 你值得拥有.
 
 
先上一张图吧,有须要再详细写
 
 
  1. crf 分词、语法依存分析、命名实体识别,可是如今正在愈来愈多的应用场景里被RNN已经它的变种们所替代~ LSTM+CRF的解决方案取得了state of art的效果~
  2. lr ctr 预估,商品推荐转换为点击率预估也能够用该模型。以前天猫大数据比赛不少同窗都是用它作的session first。能够着重了解推导,正则化及并行。但如今愈来愈多的依赖于深度学习,包括DNN, DRL.
  3. svm 能够作文本分类,人脸识别等,了解下原始问题如何转换为对偶问题,而后使用smo或者其余问题求解,还有了解下核函数~
  4. adaboost 自己是exp loss在boosting方法下的Model.
  5. EM 是一种优化算法,本质我的认为有点相似于离散空间的梯度上升算法,通常是结合具体的算法来用,好比混合高斯模型,最大熵,无监督HMM等,但比较经典的我的感受仍是pLSA,其实k-means背后也有em的思想,了解em再看k-means就有感受了。
  6. 决策树能够认为是将空间进行划分,ID3和C4.5算是比较经典的决策树算法,能够用来分类,也能够用来回归,但业界不多直接使用一棵树,通常使用多棵树,组成committee,较为经典有GBDT 和RF,二者都是ensemble learning的典范,只不过前者使用boosting下降bias,后者使用bagging下降variance从而提高模型的performance。在ESL中有个对比,使树形模型几乎完爆其余算法,泛化能力和学习能力都很牛逼。业界的话通常用来作搜索排序和相关性。
  7. HMM,在基础的一阶马儿科夫的基础之上,加入隐含状态,有二者假设,解决三种问题,通常时间序列预测均可以用该模型,固然了,NLP中的分词,语音识别等效果也还不错。

 

先写到这,求大神来喷~

 
 
分别用到的频率多大?

It depends. 看你须要处理的问题是什么。不一样数据规模、不一样特征都会影响算法的选择。

通常用途是什么?

这个问题太大了,简单来讲,
KNN、朴素贝叶斯、决策树、SVM、logistic回归、adaboost用来分类。
EM算法用于寻找隐藏参数的最大似然估计。该算法首先在E step中计算隐藏参数的似然估计,而后再M step中进行最大化,而后进行EM step的迭代直至收敛。应用场景之一是聚类问题,但EM算法自己并非一个聚类算法。举个例子,GMM(高斯混合模型)和Kmeans在聚类时都使用了EM算法。
最大熵模型是一个几率模型,决策树的数学基础就是它。
HMM也是一个统计模型,咱们不能用它来作什么,可是能够利用这个模型对现实生活中的问题建模。

须要注意什么?
实践出真知。
 
 
谢霄哥邀请
这个问题确实颇有意思,做为新入门的小白 只能提供一点点粗略的认识。
----------------------------------------------------------------------------------------------------------

K近邻:算法采用测量不一样特征值之间的距离的方法进行分类。

优势:

1.简单好用,容易理解,精度高,理论成熟,既能够用来作分类也能够用来作回归;

2.可用于数值型数据和离散型数据;

3.训练时间复杂度为O(n);无数据输入假定;

4.对异常值不敏感

缺点:

1.计算复杂性高;空间复杂性高;

2.样本不平衡问题(即有些类别的样本数量不少,而其它样本的数量不多);

3.通常数值很大的时候不用这个,计算量太大。可是单个样本又不能太少 不然容易发生误分。

4.最大的缺点是没法给出数据的内在含义。


朴素贝叶斯

优势:

1.生成式模型,经过计算几率来进行分类,能够用来处理多分类问题,

2.对小规模的数据表现很好,适合多分类任务,适合增量式训练,算法也比较简单。

缺点:

1.对输入数据的表达形式很敏感,

2.因为朴素贝叶斯的“朴素”特色,因此会带来一些准确率上的损失。

3.须要计算先验几率,分类决策存在错误率。


决策树

优势:

1.概念简单,计算复杂度不高,可解释性强,输出结果易于理解;

2.数据的准备工做简单, 可以同时处理数据型和常规型属性,其余的技术每每要求数据属性的单一。

3.对中间值得确实不敏感,比较适合处理有缺失属性值的样本,可以处理不相关的特征;

4.应用范围广,能够对不少属性的数据集构造决策树,可扩展性强。决策树能够用于不熟悉的数据集合,并从中提取出一些列规则 这一点强于KNN。

缺点:

1.容易出现过拟合;

2.对于那些各种别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具备更多数值的特征。

3. 信息缺失时处理起来比较困难。 忽略数据集中属性之间的相关性。


Svm

优势:

1.可用于线性/非线性分类,也能够用于回归,泛化错误率低,计算开销不大,结果容易解释;

2.能够解决小样本状况下的机器学习问题,能够解决高维问题 能够避免神经网络结构选择和局部极小点问题。

3.SVM是最好的现成的分类器,现成是指不加修改可直接使用。而且可以获得较低的错误率,SVM能够对训练集以外的数据点作很好的分类决策。

缺点:对参数调节和和函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。


Logistic回归:根据现有数据对分类边界线创建回归公式,依次进行分类。

优势:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低;

缺点:容易欠拟合,分类精度可能不高


EM 指望最大化算法-上帝算法

只要有一些训练数据,再定义一个最大化函数,采用EM算法,利用计算机通过若干次迭代,就能够获得所需的模型。EM算法是自收敛的分类算法,既不须要事先设定类别也不须要数据见的两两比较合并等操做。缺点是当所要优化的函数不是凸函数时,EM算法容易给出局部最佳解,而不是最优解。


参考文献:

机器学习--判别式模型与生成式模型

数据挖掘十大算法----EM算法(最大指望算法)

各类分类算法的优缺点

机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

吴军.数学之美[M].北京:人民邮电出版社,2014.

Peter Harrington,李锐,李鹏,曲亚东,王斌.机器学习实战[M].北京:人民邮电出版社2013.

李航.统计学习方法[M].北京:清华大学出版社 2012.

杉山将,许永伟.图解机器学习[M].北京:人民邮电出版社2015.

斯坦福大学公开课 :机器学习课程

 
 

说一些和题目里面的模型不太有关系的话,介绍一个 KL 散度的运用小场景:

写过一篇关于 KL 散度的理论+运用的文章:KL 散度(从动力系统到推荐系统)

在信息论和动力系统里面,Kullback-Leibler 散度(简称 KL 散度,KL divergence)是两个几率分布 P 和 Q 的一个非对称的度量公式。这个概念是由 Solomon Kullback 和 Richard Leibler 在 1951 年引入的。从几率分布 Q 到几率分布 P 的 KL 散度用 D_{KL}(P||Q) 来表示。尽管从直觉上看 KL 散度是一个度量或者是一个距离,可是它却不知足度量或者距离的定义。例如,从 Q 到 P 的 KL 散度就不必定等于从 P 到 Q 的 KL 散度。本文即将介绍如何将动力系统的概念运用到实际推荐系统的工做中,从而达到更佳的推荐效果。

详细请见:KL 散度(从动力系统到推荐系统)
 
 
现代玄学,不少须要依靠经验
 
具体问题具体分析。。。。。。
 
 

算法是解决方法的数学抽象,一个算法诞生于某个应用场景下,但也能够用在其余应用场景。按场景来分不太合理。


好比pagerank是用来作网页排序的,有人把它用在文本处理上,发现效果奇好,因而发明了textrank。再好比word2vec是天然语言处理的方法,但有人用它来处理交互数据给微博用户作推荐。
 
 
随便强答一发吧。说几个本身用过的。lr万金油中的万金油,解释性很强。(每一个特征能够经过权重来分析重要性,这就是所谓的可解释性)。应用场合不少,例如CTR预估,由于在这个场合下特征纬度很高而且稀疏。很适合用lr。当特征维度不高,并且不会稀疏(通常是没onehot),也就是比较稠密的时候用gbdt或者xgboost比较合适。
相关文章
相关标签/搜索