阅读更多
【编者按】针对Quora上的一个老问题:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain近日给出新的解答,他根据奥卡姆剃刀原理依次推荐了逻辑回归、SVM、决策树集成和深度学习,并谈了他的不同认识。他并不推荐深度学习为通用的方法,这也侧面呼应了我们之前讨论的问题:深度学习能否取代其他机器学习算法

不同分类算法的优势是什么?例如有大量的训练数据集,上万的实例,超过10万的特征,我们选择哪种分类算法最好?Netflix公司工程总监Xavier Amatriain认为,应当根据奥卡姆剃刀原理(Occam's Razor)来选择算法,建议先考虑逻辑回归。

选择一个合理的算法可以从很多方面来考察,包括:
  • 训练实例的数量?
  • 特征空间的维度?
  • 是否希望该问题线性可分?
  • 特征是否是独立的?
  • 是否预期特征能够线性扩展?
  • 过度拟合是否会成为一个问题?
  • 系统在速度/性能/内存使用等方面的要求如何?

逻辑回归

作为一般的经验法则,我建议先考虑逻辑回归(LR,Logistic Regression)。逻辑回归是一个漂亮乖巧的分类算法,可以训练你希望的特征大致线性和问题线性可分。你可以很容易地做一些特征引擎把大部分的非线性特征转换为线性。逻辑回归对噪声也相当强劲,能避免过度拟合,甚至使用L2或L1正则化做特征选择。逻辑回归也可以用在大数据场景,因为它是相当有效的,并且可以分布使用,例如ADMM。 逻辑回归的最后一个优点是,输出可以被解释为概率。这是一个好的附加作用,例如,你可以使用它排名而不是分类。

即使在你不希望逻辑回归100%地工作,你也可以帮自己一个忙,在使用“票友”办法之前,运行一个简单的L2正则化逻辑回归作为基线。

好了,现在你已经设置逻辑回归基线,下一步你应该做的,我基本上会推荐两个可能的方向:支持向量机(SVM)或者决策树集成。如果我不知道你的具体问题,我肯定会选择后者,但我将开始描述为什么SVM可能是一个值得考虑的方法。

支持向量机

支持向量机使用一个与LR不同的损失函数(Hinge)。它们也有不同的解释(maximum-margin)。然而,在实践中,用线性核函数的SVM和逻辑回归是没有很大的不同的(如果你有兴趣,你可以观察Andrew Ng在他的Coursera机器学习课程如何从逻辑回归中驱动SVM)。用SVM代替逻辑回归的一个主要原因可能是因为你的问题线性不可分。在这种情况下,你将不得不使用有非线性内核的SVM(如RBF)。事实上,逻辑回归也可以伴随不同的内核使用,但出于实际原因你更可能选择SVM。另一个使用SVM的相关理由可能是高维空间。例如,SVM已经被报道在工作文本分类方面做得更出色。

不幸的是,SVM的主要缺点是,它们的训练低效到痛苦。所以,对于有大量训练样本的任何问题,我都不会推荐SVM。更进一步地说,我不会为大多数“工业规模”的应用程序推荐SVM。任何超出玩具/实验室的问题可能会使用其他的算法来更好地解决。

决策树集成

第三个算法家族:决策树集成(Tree Ensembles)。这基本上涵盖了两个不同的算法:随机森林(RF)和梯度提升决策树(GBDT)。它们之间的差异随后再谈,现在先把它们当做一个整体和逻辑回归比较。

决策树集成有超过LR的不同优势。一个主要优势是,它们并不指望线性特征,甚至是交互线性特性。在LR里我没有提到的是,它几乎不能处理分类(二进制)特性。而决策树集成因为仅仅是一堆决策树的结合,可以非常好地处理这个问题。另一主要优点是,因为它们构造了(使用bagging或boosting)的算法,能很好地处理高维空间以及大量的训练实例。

至于RF和GBDT之间的差别,可以简单理解为GBDT的性能通常会更好,但它们更难保证正确。更具体而言,GBDT有更多的超参数需要调整,并且也更容易出现过度拟合。RF几乎可以“开箱即用”,这是它们非常受欢迎的一个原因。

深度学习

最后但并非最不重要,没有深度学习的次要参考,这个答案将是不完整的。我绝对不会推荐这种方法作为通用的分类技术。但是,你可能会听说这些方法在某些情况下(如图像分类)表现如何。如果你已经通过了前面的步骤并且感觉你的解决方案还有优化的空间,你可能尝试使用深度学习方法。事实是,如果你使用一个开源工具(如Theano)实现,你会知道如何使这些方法在你的数据集中非常快地执行。

总结

综上所述,先用如逻辑回归一样简单的方法设定一个基准,如果你需要,再使问题变得更加复杂。这一点上,决策树集成可能正是要走的正确道路,特别是随机森林,它们很容易调整。如果你觉得还有改进的余地,尝试GBDT,或者更炫一些,选择深度学习。

你还可以看看Kaggle比赛。如果你搜索关键字“分类”,选择那些已经完成的,你能找到一些类似的东西,这样你可能会知道选择一个什么样的方法来赢得比赛。在这一点上,你可能会意识到,使用集成方法总容易把事情做好。当然集成的唯一问题,是需要保持所有独立的方法并行地工作。这可能是你的最后一步,花哨的一步。

编辑点评:Xavier Amatriain不推荐深度学习为通用算法的理由,并不能说是因为深度学习不好,而是因为深度学习会增加复杂性及成本,却无法保证在所有的场景表现出比逻辑回归、SVM及决策树集成更优的结果。事实上,Xavier Amatriain的Netflix团队早已开始研究人工神经网络和深度学习技术,希望借助AWS云服务和GPU加速的分布式神经网络,分析网民最爱看的电影电视剧,实现节目的个性化推荐。




Netflix推荐系统架构(图片来自Xavier Amatrain参与撰写的Netflix官方博客)


此后,Xavier Amatriain还分享了Netflix机器学习实践的十大经验教训,大致包括:

  • 更多的数据需要与更好的模型之匹配
  • 你可能不需要所有的大数据
  • 更复杂的模型未必意味着更好的结果,可能是你的样本集太简单
  • 要充分考虑你的训练数据
  • 学会处理偏差
  • UI是联系算法和最重要的用户之间唯一通道
  • 正确的演进方式比数据和模型更重要
  • 分布式算法重要,知道在哪个层级使用它更重要
  • 选择合适的度量自动超参数优化
  • 并非所有的事都能离线完成,近线处理也是一种选择

原文链接:What are the advantages of different classification algorithms?(翻译/王玮 编辑/周建丁)
  • 大小: 111.4 KB
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • C#与.NET 二进制形式的文件(图片)的存储与读取

    C#与.NET 二进制形式的文件(图片)的存储与读取

  • C#图片保存与读取,以及图片另存

    照片的保存与读取      /// <summary> /// 图片转二进制 /// </summary> /// <param name="imgPhoto">图片对象</param> /// <returns>二进制</returns>...

  • 一起谈.NET技术,c#数据库存取图片的三种方式

      第一种方式   文件夹与数据库配合   近来做了不少关于这块的功能 ,随着网络的飞速发展,网络存取图片已不再是神话,而成为了一种时尚,如果是你 是用Asp.net开发的话,可能更多的人会考虑使用数据库存储图片的路经,而在文件夹是存储图片的方式。这种方式主要的方法有两个一个就是怎么样读取图片,怎么样存储图上,读取的话我就不多说的这个是最简单的了,只要大家把地址=给存储图片的对象就行了,在取的时候...

  • C# 存取数据库中的图像

    一、数据库中的图像存取方法   1. 读取image类型的数据  读取image类型数据的方法可分为以下几步:  1) 先使用无符号字节数组存放数据库对应的数据集中表的image类型字段的值。例如:  byte[] bytes= (byte[]) image类型字段值  2) 使用MemoryStream类,该类创建支持存储区为内存的流。即MemoryStream类创建的流以内

  • C# 图片操作(图片读取,保存,转换,传输)

    C#,WPF 图片操作(图片读取,保存,转换,传输),JPG PNG GIF BMP图片格式的区别:

  • 【转】Netflix工程总监眼中的分类算法:深度学习优先级最低

    摘要:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain根据奥卡姆剃刀原理依次推荐了逻辑回归、SVM、决策树集成和深度学习,并谈了他的不同认识。他并不推荐深度学习为通用的分类技术。 针对...

  • Netflix:通过个性化推荐算法,每年节约10亿美元

    Netflix的推荐算法究竟有多牛?根据Netflix产品创新副总裁Carlos Uribe-Gomez和首席产品官Neil Hunt的一份报告,算法能够为Netflix节省每年10亿美元。Netflix今年在内容花了60亿美元,而让其中的冷门内容也能够发挥...

  • 深度学习和机器学习的相关资料

    介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning. 《Deep Learning in Neural Networks: An Overview》 介绍:这是瑞士人工智能...

  • 机器学习,深度学习的资料和工具库大全

    介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning. 《Deep Learning in Neural Networks: An Overview》 介绍:这是瑞士人工

  • 小谈c#数据库存取图片的方式

            C#论坛同步地址(提供下载):http://www.sufeinet.com/thread-1261-1-1.html 第一种方式   文件夹与数据库配合         近来做了不少关于这块的功能 ,随着网络的飞速发展,网络存取图片已不再是神话,而成为了一种时尚,如果是你 是用Asp.net开发的话,可能更多的人会考虑使用数据库存储图片的路经,而在文件夹是存储图片的方式。...

  • C#玩转图片存取

    困扰了我一天半的图片转化存取今天终于解决了,图片的存取只是比普通数据的存取多了个转换数据的过程,这个转换是真的皮啊。 话不多说,先看整体效果: 转化图片为二进制流+存入数据库+将二进制流图片转化为图片并显示在图片框 /// <summary> /// 将图片路径转为二进制流 /// 数据库开销相对较小 /// 通过商品名改图片 ...

  • C#保存图片到数据库——图片与数据流的相互转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.IO; namespace测试001 { classImageOrByte { ///<summary> ...

  • C#获取内存图像数据流的方法

    背景:有的时候我们已经得到一个图像的内存对象,如Bitmap对象,我们想要获取到这个对象的数据流,可以将其序列化到磁盘上,并且也可以反序列化为内存对象,这个时候就有了如题的问题出现,我搜遍全网就是没有发现一个比较合适的方法,于是我绞尽脑汁写了如下方法。 public byte[] ImgToBytes(Bitmap bmp) { int width =

  • 机器学习和深度学习资料汇总【01】

    介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning. 《Deep Learning in Neural Networks: An Overview》 介绍:这是瑞士人工智能实验室...

  • 深度学习如何入门?

    beanfrog ,computer vision ...神经网络肯定是要学习的,主要是BP算法,可以看看PRML3、4、5三章,可先忽略其中的贝叶斯视角的解释。一些主要的算法理解要看具体的论文了,有个Matlab的程序不错,有基本算法的实

  • 机器学习(Machine Learning)&深度学习(Deep Learning)资料汇总

    机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1) 《Brief History of Machine Learning》 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机、神经网络、决策树、S

  • c#操作sql中存取图片image

    c#在sql数据库中存取图片image示例。 (1)控制台应用程序下演示插入图片 复制代码代码如下: public void InsertIMG() { //将需要存储的图片读取为数据流 FileStream fs = new FileStream(@"E:\c.jpg", FileMode.Open,FileAccess.Read); Byte[] btye2 =

  • C#图片存到资源文件,以及调用图片

    在程序中会用到图片,有两种方法,一种是将图片放在运行文件夹中,直接调用,另一种是将图片放入资源文件中。方法一,一般在.exe文件同级创建文件夹,如“ico”,然后把图标放进去。在程序中代码采用相对路径调用。这种方式的优点是,以后更换图标比较方便,直接替换文件即可。代码略。方法二,在一些小程序中,如我们不想程序带有一系列除.exe以外的文件,可以采用导入资源文件中的形式。导入资源文件,优点有安全、读...

Global site tag (gtag.js) - Google Analytics