2013-12-18 35 views
17

在R中,运行“随机森林”模型后,我可以使用save.image("***.RData")来存储模型。之后,我可以加载模型直接进行预测。将python随机森林模型保存到文件

你能在python中做类似的事吗?我将模型和预测分为两个文件。并在型号文件:

rf= RandomForestRegressor(n_estimators=250, max_features=9,compute_importances=True) 
fit= rf.fit(Predx, Predy) 

我试图返回​​或fit,但仍无法加载的文件预测模型。

您可以使用sklearn随机森林包来分离模型和预测吗?

+2

请注意,R的'save.image'会保存工作区中的所有内容,包括数据集,工作变量等。如果您只想要拟合的模型,请使用'save'。 –

+0

哇!感谢这个有用的答案!每次我save.image时,文件应该非常大。谢谢! – user3013706

回答

21
... 
import cPickle 

rf = RandomForestRegresor() 
rf.fit(X, y) 

with open('path/to/file', 'wb') as f: 
    cPickle.dump(rf, f) 


# in your prediction file                                                   

with open('path/to/file', 'rb') as f: 
    rf = cPickle.load(f) 


preds = rf.predict(new_X) 
+1

进一步的问题:'path/to/file',我应该使用什么格式来保存文件?谢谢 – user3013706

+2

@ user3013706你是指什么文件扩展名?它不应该。我认为大会是使用'.cpickle' –

+1

scikit学习文档推荐'joblib.dump',它也出现在'sklearn.externals.joblib' – MaxNoe

0

我用莳萝,它存储所有的数据,我想可能模块信息?也许不会。我记得尝试使用pickle来存储这些非常复杂的对象,但它不适合我。 cPickle可能与dill做同样的工作,但我从来没有试过cpickle。它看起来像是以完全相同的方式工作。我使用“obj”扩展名,但这绝不是传统的......从我存储对象开始,这对我来说意义重大。

import dill 
wd = "/whatever/you/want/your/working/directory/to/be/" 
rf= RandomForestRegressor(n_estimators=250, max_features=9,compute_importances=True) 
rf.fit(Predx, Predy) 
dill.dump(rf, open(wd + "filename.obj","wb")) 

顺便说一句,不知道你是否使用IPython的,但有时写一个文件的方式不那么你必须做的:

with open(wd + "filename.obj","wb") as f: 
    dill.dump(rf,f) 

再次调用对象:

model = dill.load(open(wd + "filename.obj","rb")) 
0

对于模型存储你也可以使用.sav合成。它存储完整的模型和信息。