在Kaggle上参加机器学习比赛,用什么算法最容易拿奖金? 你可能会说:当然是深度学习。 还真不是,据统计获胜最多的是像XGBoost这种梯度提升算法。 这就奇了怪了,深度学习在图像、语言等领域大放异彩,怎么在机器学习比赛里还不如老前辈了。 一位Reddit网友把这个问题发在机器学习板块(r/MachineLearning),并给出了一个直觉上的结论:
但这背后的原理能不能用数学原理来解释? 更进一步,能不能仅通过数据集的类型和规模来判断哪种算法更适用于手头的任务。
问题吸引了很多人参与讨论,有人回复到:
关键在能不能人工提取特征有网友表示,虽然很难给出详细论证,但可以猜测一下。 基于树的梯度提升算法可以简单的分离数据,就像这样: 如果特征小于某个值就向左,反之就向右,一步一步把数据拆解。 在深度学习中,要用到多个隐藏层才能把输入空间变换成线性可分割: 这个过程就像是把输入空间在高维进行“揉捏”: 数据集越复杂,需要的隐藏层就越多,变换过程很可能失败,反而让数据更加缠在一起: 即使成功了,相对梯度提升树来说也是效率极低的。 深度学习的优势是,面对人类很难手工提取特征的复杂数据可以自动创建隐藏特征。 而且即使你手工创建了特征,深度网络无论如何还是会自己创建隐藏特征。 而Kaggle比赛中使用的表格数据,特征往往已经有了,就是表头,那么直接使用梯度提升就好。 就像Kaggle Avito挑战的冠军所说:“遇事不决,XGBoost”。 吃数据的怪物另一个高赞回复是:
在小数据集上深度学习容易过拟合,正则化的方法又依赖许多条件。在给定数据集的比赛上,还是梯度提升比较迅速、稳定。 而参数越多的深度神经网络需要越多的数据,比赛提供的数据集有限,数据维度也比较低,发挥不出深度学习的实力。 一位在Kaggle上成绩很好的大神补充到:
参考链接: |
|