【问题标题】:Getting trees from Random Forest从随机森林中获取树木
【发布时间】:2017-12-24 13:44:51
【问题描述】:

我正在使用来自 Skleran 的随机森林分类器。 我已经训练并调整了我的模型。

我的数据集包含 40 个样本,每个样本有 4 个特征,并且有两个类我想对我的样本进行分类。

现在我的问题是: 我想保存这个模型形成的树,然后在另一个脚本中再次加载它以进行预测。

注意 - 我知道 joblib 和 pickle 模块,它们将模型保存在“.sav”文件中,但我不想保存该模型实例。

我通过使用 sklearns 的“tree.export_graphviz”找到了一种非常有趣的方法。这是我用来保存树木的代码:

from sklearn.ensemble import RandomForestClassifier 
from sklearn.tree import export_graphviz

model=RandomForestClassifier()
model.fit(X, Y)

i_tree=0
for tree in model.estimators_:
    with open('iris_tree_' + str(i_tree) + '.dot', 'w') as my_file:
        my_file = export_graphviz(tree, out_file = my_file)
    i_tree = i_tree + 1

我面临的问题是如何使用这些树进行预测?

保存的文件包含这种格式的树:

digraph Tree {
node [shape=box] ;
0 [label="X[3] <= 0.4\ngini = 0.4387\nsamples = 20\nvalue = [27, 13]"] ;
1 [label="gini = 0.0\nsamples = 7\nvalue = [0, 13]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="gini = 0.0\nsamples = 13\nvalue = [27, 0]"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
}

可以使用graphviz的在线门户将数据转换成树。

转换后的数据看起来像this

如何解析这类数据?

我最感兴趣的是树的每个块中的那些“X[3]

【问题讨论】:

  • 您的目标是获得一些图形输出,实现您在问题中引用的生成的Tree 图形吗?
  • 不,我不需要图形输出。我可以从中获取参数的任何格式 - 分裂发生的值是什么,左右孩子。看,我需要这些值以便我可以对未知数据集进行预测,而无需使用 sklearn 的 predict 函数,因为树只是 if 和 else 在不同条件下循环。
  • 我明白了。那么在您发布的digraph Tree 示例中的数据中,您究竟希望提取什么用于您的目的?也许我可以帮忙。
  • 谢谢,我的树的每个块都需要那些“X[3]
  • 请看下面我的正则表达式解决方案。

标签: python regex graphviz random-forest


【解决方案1】:

如果确实是您正在寻找的小片段,您可以考虑使用正则表达式,例如:

\D\[\d+\]\s+<=\s+\d+\.\d+

即“非数字字符,开括号,一些数字,右括号,空格,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-24
    • 2017-12-04
    • 2016-01-21
    • 2020-02-28
    • 2016-10-08
    • 2020-08-28
    • 2019-10-23
    • 2013-12-31
    相关资源
    最近更新 更多