使用 Pycaret 提前停止?使用 Catboost 和 XGBoost 过度拟合

Early stopping with Pycaret? Overfitting with Catboost and XGBoost

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

到目前为止,我发现 Catboost 和 XGBoost 过拟合。

对于线性回归train/test-score是训练R2:0.72,测试R2:0.65

有没有办法为 XGBoost 和 Catboost 设置 'Early Stopping' 来避免这种过拟合? 或者在 Pycaret 中是否有其他参数可以调整以避免过度拟合?

还有更多的可能性,如何避免过拟合。

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

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

pycaret 中有一个提前停止参数,但我不确定它在做什么。它也仅适用于 tune_model 函数。如果您允许 pycaret 自动搜索 xgboost 和 catboost 的超参数,它们应该不会再过度拟合。这是因为他们将调整正则化超参数(叶权重上的 L1 and/or 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 函数中。