繁体   English   中英

保存sklearn交叉验证对象

[英]Save sklearn cross validation object

遵循sklearn的教程之后 ,我尝试保存一个通过sklearn创建但未成功的对象。 似乎交叉验证对象存在问题,因为我可以保存实际的(最终)模型。

鉴于:

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)

这将成功:

joblib.dump(cvgridsrch.best_estimator_, 'C:\\Users\\Desktop\\DMA\\cvgridsrch.pkl', compress=9)

这将失败:

joblib.dump(cvgridsrch, 'C:\\Users\\Desktop\\DMA\\cvgridsrch.pkl', compress=9)

错误:

PicklingError: Can't pickle <type 'instancemethod'>: it's not found as __builtin__.instancemethod

如何保存完整的对象?

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

import dill  

这样就可以腌制lambda函数。

一个可能的原因可能是多线程问题,您可以参考 stackoverflow答案。

另外,您是否可以不通过joblib而是通过更基本的方法(例如pickle)(甚至不是限制性更大的cPickle)来转储对象?

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

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

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

那你可以用

with open('file_name', 'rb') as f:
    gs = pickle.load(f)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM