2013-12-18 31 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合成。它存儲完整的模型和信息。