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

简介:

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

  【编者按】针对 Quora 上的一个老问题:不同分类算法的优势是什么?Netflix 公司工程总监 Xavier Amatriain 近日给出新的解答,他根据奥卡姆剃刀原理依次推荐了逻辑回归、SVM、决策树集成和深度学习,并谈了他的不同认识。他并不推荐深度学习为通用的方法。

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

  选择一个合理的算法可以从很多方面来考察,包括:

  1. 训练实例的数量?
  2. 特征空间的维度?
  3. 是否希望该问题线性可分? 
  4. 特征是否是独立的?
  5. 是否预期特征能够线性扩展?
  6. 过度拟合是否会成为一个问题?
  7. 系统在速度/性能/内存使用等方面的要求如何?
  8. ……

  这个看起来有点吓人的列表并没有直接回答问题,但我们可以按照奥卡姆剃刀原则解决这个问题:用能够满足需求的最简单的算法,如果绝对的必要,不要增加复杂性。

  逻辑回归

  作为一般的经验法则,我建议先考虑逻辑回归(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. 并非所有的事都能离线完成,近线处理也是一种选择

本文转自叶小钗 h数据之巅博客园博客,原文链接:http://www.cnblogs.com/asxinyu/articles/4527169.html,如需转载请自行联系原作者

相关文章
|
16天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
63 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
16天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
53 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
16天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
62 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
24天前
|
机器学习/深度学习 监控 PyTorch
深度学习工程实践:PyTorch Lightning与Ignite框架的技术特性对比分析
在深度学习框架的选择上,PyTorch Lightning和Ignite代表了两种不同的技术路线。本文将从技术实现的角度,深入分析这两个框架在实际应用中的差异,为开发者提供客观的技术参考。
41 7
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
74 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
63 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
2月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
3月前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
3天前
|
机器学习/深度学习 数据采集 传感器
基于深度学习的图像识别技术在自动驾驶中的应用研究####
本文旨在探讨深度学习技术,特别是卷积神经网络(CNN)在自动驾驶车辆图像识别领域的应用与进展。通过分析当前自动驾驶技术面临的挑战,详细介绍了深度学习模型如何提升环境感知能力,重点阐述了数据预处理、网络架构设计、训练策略及优化方法,并展望了未来发展趋势。 ####
29 6
|
7天前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
27 8