【问题标题】:Early stopping with Pycaret? Overfitting with Catboost and XGBoost提前停止使用 Pycaret?使用 Catboost 和 XGBoost 过拟合
【发布时间】:2021-03-09 03:50:28
【问题描述】:
我正在比较 Pycaret 中 Catboost、XGBoost 和 LinearRegression 的性能。 Catboost 和 XGBoost 未调整。
到目前为止,我发现 Catboost 和 XGBoost 都过拟合了。
对于线性回归,训练/测试分数是训练 R2:0.72,测试 R2:0.65
有没有办法为 XGBoost 和 Catboost 设置“提前停止”以避免这种过拟合?
或者是否有其他参数可以在 Pycaret 中进行调整以避免过度拟合?
【问题讨论】:
标签:
python
model
evaluation
pycaret
【解决方案1】:
还有更多的可能性,如何避免过拟合。
- 特征选择(可以在设置中设置)- 有两种类型和可变阈值或 RFE(递归特征消除)或 SHAP
- 调整两者 - Catboost、XGBoost(或其他树算法)
- 增加 n_estimators=100 或 500,或 1000
- 多次运行算法
- 更改采样 80/20、70/30 等。
- 删除相关输入
【解决方案2】:
首先,您如何在不调整超参数的情况下比较模型?查看您的代码会有所帮助。
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 函数中。