3

我在 Pycaret 中比较 Catboost、XGBoost 和 LinearRegression 的性能。Catboost 和 XGBoost 未调整。

到目前为止,我看到 Catboost 和 XGBoost 都过拟合了。

在此处输入图像描述

对于线性回归,训练/测试分数是训练 R2:0.72,测试 R2:0.65

有没有办法为 XGBoost 和 Catboost 设置“提前停止”以避免这种过度拟合?或者是否有其他参数可以调整 Pycaret 以避免过度拟合?

4

2 回答 2

0

存在更多可能性,如何避免过拟合。

  • 特征选择(可以在设置中设置) - 有两种类型和可变阈值或 RFE(递归特征消除)或 SHAP
  • 调整两者 - Catboost、XGBoost(或其他树算法)
  • 增加 n_estimators=100 或 500,或 1000
  • 多次运行算法
  • 更改采样 80/20、70/30 等。
  • 删除相关输入
于 2021-01-12T07:42:36.167 回答
0

首先,您如何在不调整超参数的情况下比较模型?查看您的代码会有所帮助。

pycaret 中有一个提前停止参数,但我不确定它在做什么。它也仅适用于该tune_model功能。如果您允许 pycaret 自动搜索 xgboost 和 catboost 的超参数,它们不应再过拟合。这是因为他们将调整正则化超参数(叶权重上的 L1 和/或 L2 正则化),并将比较验证集的分数。

使用 catboost(或 xgboost 或 lightgbm),您可以设置early_stopping_rounds参数以启用提前停止:

import catboost

cb = catboost.CatBoostClassifier(n_estimators=1000)
cb.fit(x_train, y_train, eval_set=(x_test, y_test), early_stopping_rounds=10, plot=True)

您需要提供eval_set,否则,它将无法评估提前停止。我认为目前不可能将early_stopping_rounds作为参数添加到您可能正在使用的任何相关 pycaret 函数中。

于 2021-05-08T23:40:08.043 回答