【问题标题】:Python scikit-learn RandomForestClassifier access individual trees and how to save themPython scikit-learn RandomForestClassifier 访问单个树以及如何保存它们
【发布时间】:2016-04-09 18:11:40
【问题描述】:

如何访问单个树并保存/加载 RandomForestClassifier 对象?

我只想查看每棵树的结构以确定哪个特征是重要的。我想将经过训练的分类器对象保存在文件或数据库中。怎么做?

【问题讨论】:

    标签: python scikit-learn random-forest


    【解决方案1】:

    你基本上有三个问题。

    1.如何查看单棵树

    您可以使用RandomForestClassifier 来查看各个树

    rf = RandomForestClassifier()
    rf.fit(X,y) 
    trees = rf.estimators_
    

    2。功能重要性

    为了确定特征的重要性,你最好的选择可能是使用

    rf.feature_importances_
    

    这将产生一个特征重要性的 numpy 数组,每列 X 一个,表示每个特征的相对重要性。

    3。保存您的模型

    保存拟合的 scikit-learn 模型或管道的一种简单方法是通过 pickle。

    byte_string = pickle.dumps(rf)
    

    然后可以使用加载它

    rf = pickle.loads(byte_string)
    

    如果你有额外的要求,它应该是 ASCII,你可能想要使用 base64。

     text_model = base64.b64encode(byte_string)
    

    【讨论】:

    • 大卫,你确定要保证完整的 RandomForestClassifier 实例被完全腌制(.fit()-ed,所有类方法)到可检索的.predict()-able 表单?
    • 我从来没有遇到过酸洗 scikit-learn 估计器或转换器的问题。在上面的示例中,我能够加载腌制字符串并使用它进行预测。
    • 谢谢大卫,值得一提。我需要重新测试(几年前尝试这个时遇到了很大的麻烦)。顺便说一句 - 你在观察这个时操作哪些版本?我的是 py26/py27,pickle/cPickle 协议=2。
    • 来自 anaconda 的 Python 2.7.10。使用标准pickle,默认协议。
    • 再次感谢,David。 仅供参考,今年该项目已转向可爱的 Mike McKerns 的 dill 主力(均用于“pickle " 服务和分布式网格处理 SERialise-pushToRemoteAgent-pullFromRemoteAgent-DESerialise & ( !! ) state-full save/restore 整个 localhost interpreter-session on another host )。
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2016-01-26
    • 2016-03-16
    • 2019-10-22
    • 2023-03-22
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多