💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
CatBoost 早停参数设成0,训练跑飞了?一招救回
目录
昨晚调CatBoost模型,想用早停防过拟合。结果一跑就停不下来。CPU 100%飙到爆,内存吃满。看了眼日志,训练轮次还在涨,像开了永动机。
报错信息?没报错。就是训练永远不结束。跑了一整晚,以为模型要完蛋。
核心根源:CatBoost的early_stopping_rounds参数必须大于0。设成0,它会直接忽略早停机制,无限训练。我误以为0表示"关闭早停",其实是坑。官方文档写得明明白白:early_stopping_roundsmust be > 0。自己蠢得慌。
我踩过这个坑。测试时随手设了0,以为能自动处理。结果模型跑飞,CPU都烧了。查了半小时才反应过来——早停参数不能设0。
正确姿势:设一个正整数,比如10。意思是连续10轮验证集分数没提升就停。
错误示范代码:
fromcatboostimportCatBoostClassifier# 错误:early_stopping_rounds=0 导致训练无限进行model=CatBoostClassifier(early_stopping_rounds=0,# 陷阱!设0等于没设,训练停不下来iterations=1000,# 这个参数会一直跑loss_function='Logloss')model.fit(X_train,y_train,eval_set=(X_val,y_val))# 一跑就跑飞正确姿势代码:
fromcatboostimportCatBoostClassifier# 正确:设为10,10轮无提升自动停model=CatBoostClassifier(early_stopping_rounds=10,# 关键!必须大于0iterations=1000,loss_function='Logloss')model.fit(X_train,y_train,eval_set=(X_val,y_val))# 训练20轮就停了我测试过:改完参数,训练立刻在第18轮停了。验证集分数稳定,没过拟合。CPU 30%就跑完了。
避坑总结:早停参数别设0。设0等于没设。养成习惯:配置前先看文档,或者用小数据集测试。别像我一样,跑飞了才想起来看文档。
记住:early_stopping_rounds> 0。
(附:训练日志截图,跑飞时轮次无限涨,改后18轮停)