英文原文:What are the advantages of different classification algorithms?(翻译/王玮编辑/周建丁)
【编者按】针对 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 是联系算法和最重要的用户之间唯一通道
- 正确的演进方式比数据和模型更重要
- 分布式算法重要,知道在哪个层级使用它更重要
- 选择合适的度量自动超参数优化
- 并非所有的事都能离线完成,近线处理也是一种选择