【发布时间】: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