如何在 scikit-learn 中保存随机森林?

Posted

技术标签:

【中文标题】如何在 scikit-learn 中保存随机森林?【英文标题】:How to save a randomforest in scikit-learn? 【发布时间】:2015-02-20 03:45:16 【问题描述】:

实际上有很多关于持久性的问题,但我已经尝试了很多使用 picklejoblib.dumps 。但是当我用它来保存我的随机森林时,我得到了这个:

ValueError: ("Buffer dtype mismatch, expected 'SIZE_t' but got 'long'", <type 'sklearn.tree._tree.ClassificationCriterion'>, (1, array([10])))

谁能告诉我为什么?

一些代码供审查

forest = RandomForestClassifier()
forest.fit(data[:n_samples], target[:n_samples ])
import cPickle
with open('rf.pkl', 'wb') as f:
    cPickle.dump(forest, f)
with open('rf.pkl', 'rb') as f:
    forest = cPickle.load(f)

from sklearn.externals import joblib
joblib.dump(forest,'rf.pkl') 

from sklearn.externals import joblib
forest = joblib.load('rf.pkl')

【问题讨论】:

请发布一些示例代码。 两种解决方案都给出同样的错误? 您是否使用相同的 32/64 位 python 来保存/加载? ***.com/questions/21033038/… 哦,我忘了我用的不是同一个位。谢谢! 【参考方案1】:

这是由使用不同的 32/64 位版本的 python 来保存/加载引起的,正如Scikits-Learn RandomForrest trained on 64bit python wont open on 32bit python 建议的那样。

【讨论】:

【参考方案2】:

尝试直接导入joblib包:

import joblib

# ...

# save
joblib.dump(rf, "some_path")

# load 
rf2 = joblib.load("some_path")

我已将完整的工作示例与代码和 cmets here 放在一起。

【讨论】:

以上是关于如何在 scikit-learn 中保存随机森林?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scikit-learn 中控制随机森林中的特征子集?

如何在 Python scikit-learn 中输出随机森林中每棵树的回归预测?

如何在 scikit-learn 中执行随机森林模型的交叉验证?

使用 scikit-learn 并行生成随机森林

如何在 Python scikit-learn 中输出随机森林中每棵树的回归预测?

SciKit-Learn 随机森林子样本大小如何可能等于原始训练数据大小?