【问题标题】:Is there way to save trained model after overfitting occurs in CatBoost?在 CatBoost 中发生过拟合后,有没有办法保存训练好的模型?
【发布时间】:2017-12-07 20:44:40
【问题描述】:

我在 Python 版本的 Catboost 库中使用 CatBoostRegressor

根据文档,可以使用我正在做的过拟合检测器,如下所示:

model = CatBoostRegressor(iterations=iters, learning_rate=0.03, depth=depth, verbose=True, od_pval=1, od_type='IncToDec', od_wait=20)
model.fit(train_pool, eval_set=validation_pool)

# this code didn't executed
model.save_model(model_name)

但是,在发生过度拟合后,我的 Python 脚本被中断,提前停止,选择你想要的任何短语,并且保存模型部分没有被执行,这导致了很多时间并且没有结果结束。我没有得到任何堆栈跟踪。

是否有可能在 CatBoost 中处理它并节省数小时的装配工作?

【问题讨论】:

  • 您能否提供更多有关您的 python 脚本为何以及如何被杀死的信息?
  • 我希望这就是过拟合检测器一直在做的事情。不确定,我完全理解您希望我回答的内容
  • 堆栈跟踪,例如。 “被杀”是什么意思?
  • I've got my Python script killed 是什么意思我预计会引发错误。 ?
  • 好吧,也许我应该改写一下。我没有得到任何堆栈跟踪,我的脚本刚刚被打断,过早结束,选择你想要的任何单词。如果我有错误,我当然会把它贴在这里。我很确定,这是我正在使用的库(CatBoost)的东西

标签: python machine-learning catboost


【解决方案1】:

使用此代码。无论 try 块中发生什么,它都会保存模型。

try:
    model.fit(X, y)
finally:
    model.save_model()

【讨论】:

  • 对其进行了测试,它确实有效,尽管起初我感谢它再次被杀死
【解决方案2】:

好吧,我不知道 catboost 是如何工作的,但我想分享一种不同的方式来保存/存储您训练过的数据,也许它会有所帮助

import pickle
model = CatBoostRegressor(iterations=iters, learning_rate=0.03, depth=depth, verbose=True, od_pval=1, od_type='IncToDec', od_wait=20)
model.fit(train_pool, eval_set=validation_pool)
#----To store model----------
filename = 'final_model' # name to store model
pickle.dump(model, open(filename, 'wb')) # pickling
#-----To load model------------
loaded_model = pickle.load(open(filename, 'rb'))

【讨论】:

  • 泡菜对我有什么帮助?
  • 您使用了多少次迭代?如果没有迭代次数超过你在训练参数中提到的那么可能是因为过度拟合...... Pickle 只是另一种存储模型的方式,很久以前当我执行多类分类时,我使用了 save_model 和它没有保存我的分类器,所以我使用了 pickle 并且它有效
【解决方案3】:

您可以使用 pickle 来完成,只需训练您的模块并使用 pickle 转储它。

 pickle.dump(regr, open("models/svrrbf.sav",'wb'))

您还可以使用该模块来测试您的输入。 希望对你有帮助

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多