首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存sklearn交叉验证对象

保存sklearn交叉验证对象
EN

Stack Overflow用户
提问于 2013-09-01 07:46:33
回答 3查看 991关注 0票数 1

按照sklearn的教程,我尝试保存一个通过sklearn创建的对象,但没有成功。问题似乎出在交叉验证对象上,因为我可以保存实际的(最终)模型。

给定:

代码语言:javascript
运行
复制
rf_model = RandomForestRegressor(n_estimators=1000, n_jobs=4, compute_importances = False)
cvgridsrch = GridSearchCV(estimator=rf_model, param_grid=parameters,n_jobs=4) 
cvgridsrch.fit(X,y)

这将会成功:

代码语言:javascript
运行
复制
joblib.dump(cvgridsrch.best_estimator_, 'C:\\Users\\Desktop\\DMA\\cvgridsrch.pkl', compress=9)

这将会失败:

代码语言:javascript
运行
复制
joblib.dump(cvgridsrch, 'C:\\Users\\Desktop\\DMA\\cvgridsrch.pkl', compress=9)

有错误:

代码语言:javascript
运行
复制
PicklingError: Can't pickle <type 'instancemethod'>: it's not found as __builtin__.instancemethod

如何保存完整的对象?

EN

回答 3

Stack Overflow用户

发布于 2017-07-10 18:30:53

如果您使用的是Python 2,请尝试:

代码语言:javascript
运行
复制
import dill  

这样就可以对lambda函数进行酸洗……

票数 1
EN

Stack Overflow用户

发布于 2013-09-02 03:03:11

一个可能的原因可能是多线程问题,您可以参考this堆栈溢出答案。

另外,有没有可能不通过joblib转储对象,而是使用更基本的方法,比如pickle (甚至不是cPickle,它有更多的限制)?

票数 0
EN

Stack Overflow用户

发布于 2015-08-19 14:38:43

我知道这是一个老生常谈的问题,但对于来这里遇到相同或类似问题的人来说,这可能是有用的。

我不确定具体的错误消息,但我通过使用pickle成功地将整个GridSearchCV对象保存到了我自己的项目中:

代码语言:javascript
运行
复制
import pickle
gs = GridSearchCV(some parameters) #create the gridsearch object
gs.fit(X, y) # fit the model
with open('file_name', 'wb') as f:
    pickle.dump(gs, f) # save the object to a file

然后你就可以使用

代码语言:javascript
运行
复制
with open('file_name', 'rb') as f:
    gs = pickle.load(f)

读取该文件,从而能够再次使用该对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18553860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档