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

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

【编者按】针对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机器学习实践的十大经验教训,大致包括:

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

原文链接What are the advantages of different classification algorithms?(翻译/王玮 编辑/周建丁)

Netflix工程总监眼中的分类算法:深度学习优先级最低的更多相关文章

  1. 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    https://zhuanlan.zhihu.com/p/25928551 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文题目便是文本分类问题,趁此机会总结下文本分类 ...

  2. [转] 用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践

    转自知乎上看到的一篇很棒的文章:用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践 近来在同时做一个应用深度学习解决淘宝商品的类目预测问题的项目,恰好硕士毕业时论文 ...

  3. 【Todo】【转载】深度学习&神经网络 科普及八卦 学习笔记 & GPU & SIMD

    上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...

  4. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  5. AI - 深度学习之美十四章-概念摘要(1~7)

    原文链接:https://yq.aliyun.com/topic/111 本文是对原文内容中部分概念的摘取记录,可能有轻微改动,但不影响原文表达. 01 - 一入侯门"深"似海,深 ...

  6. 深度学习之概述(Overview)

    2016年被称为人工智能的元年,2017年是人能智能应用的元年:深度学习技术和应用取得飞速发展:深度学习在互联网教育场景也得到广泛应用.本文主要介绍机器学习及深度学习之定义及基本概念.相关网络结构等. ...

  7. Recorder︱深度学习小数据集表现、优化(Active Learning)、标注集网络获取

    一.深度学习在小数据集的表现 深度学习在小数据集情况下获得好效果,可以从两个角度去解决: 1.降低偏差,图像平移等操作 2.降低方差,dropout.随机梯度下降 先来看看深度学习在小数据集上表现的具 ...

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

    转载:http://dataunion.org/8463.html?utm_source=tuicool&utm_medium=referral <Brief History of Ma ...

  9. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(下)

    转载:http://www.jianshu.com/p/b73b6953e849 该资源的github地址:Qix <Statistical foundations of machine lea ...

随机推荐

  1. 使用solrj操作solr索引库,solr是lucene服务器

    客户端开发 Solrj 客户端开发 Solrj Solr是搭建好的lucene服务器 当然不可能完全满足一般的业务需求 可能 要针对各种的架构和业务调整 这里就需要用到Solrj了 Solrj是Sol ...

  2. Linux下Wireshark普通用户不能获取网络接口问题

    Linux下Wireshark普通用户不能获取网络接口问题 1.安装setcap, setcap 是libcap2-bin包的一部分,一般来说,这个包默认会已经装好. sudo apt-get ins ...

  3. hadoop错误DataXceiver error processing WRITE_BLOCK operation

    错误: DataXceiver error processing WRITE_BLOCK operation 原因:     文件操作超租期,实际上就是data stream操作过程中文件被删掉了. ...

  4. C++使用Json作为数据包装格式的通信

    出处:http://adebugger.cn/2009/11/cpp-json-data-communication/ http://hi.baidu.com/tibelf/item/6be2accd ...

  5. Android(java)学习笔记170:Activity的生命周期

    1.首先来一张生命周期的总图: onCreate():创建Acitivity界面       onStart():让上面创建的界面可见              onResume():让上面创建的界面 ...

  6. Audit(查看审核/审计信息)

    2013需要到 网站集管理-网站集审核设置 中设置要开启的审核项,开启之后sharepoint才会记录信息,信息存储在contentDB的AuditData中: 去读审计信息的sharepoint代码 ...

  7. awk实用技巧

    awk '{sum+=$1} END {print "Sum = ", sum}' awk '{sum+=$1} END {print "Average = " ...

  8. 利用mysql中的SQL_CALC_FOUND_ROWS 来实现group by后的记录数统计

    最近正在做一个显示消息的列表页,列表页中需要根据一个字段来分组显示.并且需要一个分页的效果. 大家也知道group by 后的数据是每一组一行记录,统计分组后的总的记录数又不能用count,所以SQL ...

  9. C#基础入门--关于C#背景介绍以及变量相关

    在正式探索C#的奥秘之前,我们先谈一谈关于学习方法的问题吧.你会不会有这样的感悟,自己努力奋斗得到的东西倍加珍惜,飘到眼前的,却不屑一顾.我认为,学习的整个历程亦是如此.在学习过程中,只有我们遇到了问 ...

  10. PHP+jQuery+Ajax实现用户登录与退…

    用户登录与退出功能应用在很多地方,而在有些项目中,我们需要使用Ajax方式进行登录,登录成功后只刷新页面局部,从而提升了用户体验度.本文将使用PHP和jQuery来实现登录和退出功能. 查看演示DEM ...