XGBoost和TensorFlow都是非常强大的机器学习框架,但你怎么知道你需要哪一个?或许你需要两者兼而有之?

在机器学习中,「没有免费午餐」。将特定演算法与特定问题相匹配通常优于「一刀切」方法。然而,多年来,数据科学界已经获得了足够的经验来总结演算法和典型任务之间匹配的关系。

下面我们就从 5 个方面来总结 XBGoost 和 TensorFLow 之间如何选择。先附上总结列表。

XBGoost 与 Tensorflow 的模型选取比较

案例1:特征难以分解?

我们从2012年就了解到,神经网路对于处理高维原始数据非常有效。图像,视频,文本和音频都是高维原始数据的例子,很难预处理并表示为特征。在这些情况下,使用NN的内置特征提取单元(CNN,LSTM)可以在传统领域的一些问题上获得惊人的结果。

案例2:处理缺失值?

如果神经网路里面有缺失值,则模型会报错。这是因为在NN训练期间求解的方程假定每个输入变数的有效值。

但是,XGBoost有自己的处理缺失数据的方式。在训练期间,XGBoost执行学习为每个特征计算数据的子任务。许多现实世界的问题都缺少数据,这些数据本身包含有关目标的有价值信息。因此,对于缺失值处理 - XGBoost获胜。

案例3:你的资金有多雄厚?

神经网路训练往往需要并行计算,使其非常适合分散式训练。也就是说,如果你的预算可以涵盖使用 TPU 或 GPU 这样昂贵的机器上的运行,那么你就不用惧怕使用神经网路。

另一方面,如果您只使用数百万条记录,那么 XGBoost 则可以在较便宜的多核 CPU 上进行训练,并在比 NN 更短的时间内收敛。因此,如果数据数量不大 - XGBoost可能更实惠并且可以获得类似的结果。

案例4:你有多少数据?

由于其基础数据结构,XGBoost在并行化方式上受到限制,因此它可以处理的数据量很少。处理海量数据集的一种方法是将这些数据拆分为分片和堆叠模型 。

然而,对于神经网路,它通常需要数据「越多越好」。当参数数量一致时,即使数据量很大,神经网路也可以使其收敛,并且数据量大还可以降低泛化误差。但对于较小的数据集,XBGoost通常收敛速度更快,误差更小。

案例5:是否需要自定义输出?

相较于 NN, XGBoost 会限制数据的输出形式。它通常将1-d阵列作为记录输入并输出单个数字(回归)或概率向量(分类)。因此,配置 XGBoost 模型更容易。在 XGBoost 中,无需担心数据的输入输出形式 - 只需提供看起来像表的pandas datafame,设置标签列就可以了。

但是,神经网路通过张量的设计, 以处理高维矩阵。 NN的输出和输入形状可以在数字,序列(矢量),图像甚至视频之间变化。因此对于传统数据问题,例如基于结构化数据的广告点击预测 - 两者都可以很好地工作。在需要多元数据形态问题上,NN可能是唯一有效的选择!

案例6:我可以同时使用两个模型吗?

如果你不想选择怎么办?在许多情况下,两种模型的组合使用效果往往会优于每个单独的模型的预测结果。研究已经发现,对同一数据集,堆叠模型可以实现较低的错误率, 但需要编写合适的组合模型策略。


推荐阅读:
相关文章