1

按照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

如何保存完整的对象?

4

3 回答 3

1

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

import dill  

这样 lambda 函数可以被腌制....

于 2017-07-10T10:30:52.743 回答
0

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

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

于 2013-09-01T19:03:10.947 回答
0

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

我不确定具体的错误消息,但我设法通过使用 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)

读取文件,因此能够再次使用该对象。

于 2015-08-19T06:38:43.227 回答