将随机森林模型保存到文件?

Posted

技术标签:

【中文标题】将随机森林模型保存到文件?【英文标题】:Saving Random Forest model to file? 【发布时间】:2020-01-16 05:43:55 【问题描述】:

尝试保存随机森林模型。

所有方法都失败了:

self.model = RandomForestClassifier(n_estimators=n_estimators,criterion='entropy', min_samples_leaf=2, max_depth=15,min_samples_split=5, max_features=None, n_jobs=-1, random_state=555)

def save_model(self, fname):
    with open(fname,'wb') as f :
        dill.dumps(self.model, f)



pickle: TypeError: can't pickle instancemethod objects

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

cPickle : TypeError: can't pickle instancemethod objects

dill : ValueError: pickle protocol must be <= 2

 : type(r.model)
 : sklearn.ensemble.forest.RandomForestClassifier

 :with open('test.dill', 'wb') as f : dill.dump(r.model,f, protocol=2)

  PicklingError: Can't pickle <class 'random_forest.RFWords'>: it's not the same object as random_forest.RFWords

random_forest.RFWords 是包含 RF 的类! 它如何访问 self.model 所在的类


嗯...我认为这是 IPython 问题...因为现在我正在更周到地对其进行测试...有时它可以工作!

可能是自动重装问题!!

是的,当我修改源代码时 save_model() 停止工作..

【问题讨论】:

您使用的是哪个 ml 库? 我正在使用 sklearn.__version__ '0.20.4' 【参考方案1】:

使用 joblib 腌制你训练好的模型:

from joblib import dump, load
from sklearn.ensemble import RandomForestClassifier

#load data
X, y = load_data(...)

#fit the model
estimator = RandomForestClassifier()
estimator.fit(X,y)

#pickle model to disk
dump(estimator, 'my_randomforest_model.joblib') 

#loading saved model
estimator = load('my_randomforest_model.joblib')

estimator.predict(...)

更新:

根据此错误,您必须使用更高的协议进行腌制 (>= 2):

dill : ValueError: pickle 协议必须是

尝试使用更高的协议转储如下:

dump(estimator, 'my_randomforest_model.joblib', protocol=2) 

【讨论】:

同样的错误?您能否提供有关您的模型(或管道)的更多详细信息,这可能是导致问题的不可提取的方法。尝试升级到最新版本,joblib 对我来说很好。

以上是关于将随机森林模型保存到文件?的主要内容,如果未能解决你的问题,请参考以下文章

在火花簇scala中保存随机森林模型时出错

使用 python sklearn 增量训练随机森林模型

将随机森林预测作为列添加到测试文件中

保存的随机森林模型在同一数据集上产生不同的结果

将 sklearn 随机森林 Python 模型导出到 Android

将条件变量添加到 R 中的随机森林模型