当前位置: 首页 > 科技观察

未定,XGBoost,gradientboosting比深度学习更容易赢得Kaggle竞赛

时间:2023-03-18 22:06:25 科技观察

本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。参加Kaggle上的机器学习比赛,用什么算法最容易拿奖?你可能会说:当然是深度学习了。真的不是,据统计,像XGBoost这样的梯度提升算法胜出最多。这就奇怪了,深度学习在图像、语言等领域大放异彩,怎么在机器学习竞赛上还不如老前辈呢。一位Reddit网友在机器学习版块(r/MachineLearning)发布了这个问题,并给出了一个直观的结论:boosting算法在比赛提供的表格数据中表现最好,而深度学习适用于非常大的非表格数据集(例如张量、图像、音频、文本)。但是这背后的原理能不能用数学原理来解释呢?更进一步,是否可以仅通过数据集的类型和大小来判断哪种算法更适合手头的任务。这可以节省很多时间。举个极端的例子,如果你尝试用AlphaGo做Logistic回归,你会走得很远。这个问题吸引了很多人参与讨论,有人回答说:这是一个非常活跃的研究领域,完全有可能就此课题做博士论文。关键是能否手动提取特征。有网友表示,虽然很难给出详细的论证,但可以猜一猜。tree-basedgradientboosting算法可以简单的把数据分开,像这样:如果特征小于某个值,就往左走,否则就往右走,逐级拆解数据。在深度学习中,多个隐藏层被用来将输入空间转化为线性可分的:这个过程就像在高维度上“揉捏”输入空间:数据集越复杂,需要的隐藏层就越多。如果太多,转换过程很可能会失败,反而会使数据更加纠缠不清:即使成功了,与梯度提升树相比也是极其低效的。深度学习的优势在于,面对人类难以手动提取特征的复杂数据,它可以自动创建隐藏特征。即使你手动创建特征,深度网络仍然会自己创建隐藏的特征。对于Kaggle比赛用到的表格数据,特征往往是已经存在的,也就是表头,所以直接使用gradientboosting比较好。正如KaggleAvito挑战赛的冠军所说:“的确如此,XGBoost”。数据吞噬怪兽的另一个高度赞扬的回复是:大多数Kaggle比赛的数据集都不够喂养一个神经网络怪兽。深度学习在小数据集上容易过拟合,正则化方法取决于很多条件。在给定数据集的竞争中,梯度提升更快更稳定。然而,具有更多参数的深度神经网络需要更多数据。比赛提供的数据集有限,数据维度较低,无法发挥深度学习的实力。一位在Kaggle上成绩不错的大神补充道:不同的深度网络适合某些数据集,比如CNN适合处理图像,RNN适合处理特定序列等,很难找到合适的预训练模型对于比赛中给出的数据集。总的来说,深度学习在表格数据上的表现肯定比梯度提升要好,但是需要花很多时间来优化网络架构。Kaggle上的获胜方案一般是两者结合,加上梯度增强,有经验的玩家可以在几个小时内得到不错的成绩。