在 scikit 中保存决策树模型

Posted

技术标签:

【中文标题】在 scikit 中保存决策树模型【英文标题】:Save a decision tree model in scikit 【发布时间】:2014-11-26 04:52:00 【问题描述】:

我正在使用 Python 中的 Scikit-Learn 构建决策树。我已经在特定数据集上训练了模型,现在我想保存这个决策树,以便以后可以使用它(在新数据集上)。有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

取自 this tutorial 的模型持久性部分:

使用Python内置的持久化模型可以在scikit中保存一个模型,即pickle:

>>> from sklearn import svm
>>> from sklearn import datasets
>>> clf = svm.SVC()
>>> iris = datasets.load_iris()
>>> X, y = iris.data, iris.target
>>> clf.fit(X, y)  
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

>>> import pickle
>>> s = pickle.dumps(clf)
>>> clf2 = pickle.loads(s)
>>> clf2.predict(X[0])
array([0])
>>> y[0]
0

【讨论】:

这很酷。因此,当我将 DT 保存到 pickle 文件中时,它会存储所有结构并且可以再次重复使用。这是非常好的。 R 也有什么? 了解如何在 R 中保存 robjects。一旦您可以使用 save 命令将对象保存到文件中,然后使用 load 命令读回。有关保存命令的更多详细信息,请参阅link 有关加载命令的信息,请参阅link【参考方案2】:

目前没有可靠的方法来做到这一点。虽然酸洗确实有效,但还不够好,因为不能保证您的酸洗数据能够被更高版本的 scikit-learn 正确解酸。

引用自:http://scikit-learn.org/stable/modules/model_persistence.html#security-maintainability-limitations

保存在一个 scikit-learn 版本中的模型可能无法加载到另一个版本中 版本。

【讨论】:

【参考方案3】:

我使用joblib如下:

>>> from joblib import dump, load
>>> dump(clf, 'filename.joblib')
>>> clf = load('filename.joblib')

但是,需要考虑these 的安全性和可维护性限制。

【讨论】:

以上是关于在 scikit 中保存决策树模型的主要内容,如果未能解决你的问题,请参考以下文章

scikit学习决策树模型评估

scikit-learn:将多输出决策树转换为 CoreML 模型

决策树应用

scikit学习决策树导出graphviz - 决策树中的错误类名

是否可以在 scikit-learn 中打印决策树?

Spark(pyspark)中的决策树模型如何可视化?