我在 Pycaret 中比较 Catboost、XGBoost 和 LinearRegression 的性能。Catboost 和 XGBoost 未调整。
到目前为止,我看到 Catboost 和 XGBoost 都过拟合了。
对于线性回归,训练/测试分数是训练 R2:0.72,测试 R2:0.65
有没有办法为 XGBoost 和 Catboost 设置“提前停止”以避免这种过度拟合?或者是否有其他参数可以调整 Pycaret 以避免过度拟合?
我在 Pycaret 中比较 Catboost、XGBoost 和 LinearRegression 的性能。Catboost 和 XGBoost 未调整。
到目前为止,我看到 Catboost 和 XGBoost 都过拟合了。
对于线性回归,训练/测试分数是训练 R2:0.72,测试 R2:0.65
有没有办法为 XGBoost 和 Catboost 设置“提前停止”以避免这种过度拟合?或者是否有其他参数可以调整 Pycaret 以避免过度拟合?
存在更多可能性,如何避免过拟合。
首先,您如何在不调整超参数的情况下比较模型?查看您的代码会有所帮助。
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 函数中。