Xgboost 的性能明显比随机森林差

数据挖掘 机器学习 分类 随机森林 xgboost
2021-09-16 09:29:59

我有一个包含 3500 个观察 x 70 个特征的数据集,这是我的训练集,我还有一个包含 600 个观察 x 70 个特征的数据集,它是测试集。

目标是将观察正确分类为 0 或 1。训练集的 2000 个观察为 0,其余 1600 个为 1。

我的目标是尽可能提高准确率 >=90% 的召回率。

我只根据树的数量(从 50 到 650 棵树)对集成算法进行网格搜索。分析上,每种算法的精度 >= 90% 的最佳召回结果如下:

随机森林(375 棵树)

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(random_state=0, n_estimators=375, class_weight='balanced')
classifier.fit(X_train, y_train)
  • 精度:90%
  • 召回率:24%

Xgboost(550 棵树)

from xgboost import XGBClassifier
classifier = XGBClassifier(n_estimators=n_trees, seed=0, scale_pos_weight=1.5)
classifier.fit(X_train, y_train, eval_metric='map')
  • 精度:90%
  • 召回率:15%

为什么 Xgboost 的表现比随机森林差这么多?

2个回答

不同的算法需要以不同的方式进行调整。例如,提升中的一个重要参数是 ETA 或学习率。这决定了每个提升步骤后权重的变化。这个参数对于减少 boosting 中的过度拟合很重要。

要了解不同的参数,您可以参考this

另一个重要的事情是目标函数。这将决定你的算法试图优化什么。

最后,请确保您选择的模型实际上可以最大化您关心的指标。您可以通过选择适当的 eval_metric 来做到这一点。在这种情况下,您可能希望使用 F1-Score 或固定召回率的精度。

您可以参考以下链接XGBOOST 比Xgboost Github 上的 Random Forest 慢。当有很多类时,它通常是GBT的弱点。

原因是梯度提升需要你训练 [迭代次数] * [类数] 树,而随机森林只需要 [迭代次数] 树。