python - 从随机森林中获取树木

标签 python regex graphviz random-forest

我正在使用 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

如何解析此类数据?

我最感兴趣的是树中每个 block 中的“X[3]<=0.4”值。我只需要知道我的树的任何 block 中是否存在像“X[3]<=0.4”这样的条件(因为树可以嵌套)

最佳答案

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

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

即“非数字字符、左括号、一些数字、右括号、空格、<=符号、空格、一些数字、小数点、一些数字”。我在您的文本上测试了这个正则表达式,它与该片段匹配,没有其他内容。

关于python - 从随机森林中获取树木,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45187977/

相关文章:

format - 如何在Graphviz上添加虚线下划线标签?

python - Python 中的 RSS 提要解析器库

python - tf.data.数据集 : Map fails to split string

python - 如何在具有匹配字符串的嵌套列表中查找索引的最小值和最大值?

python - 将字符串的字符与字典python进行比较

regex - 需要将存储在 bash 变量中的 IP 地址分解为八位字节

windows - keras plot_model 告诉我安装 pydot

javascript - 如何反转我的正则表达式的结果

javascript - RegEx ip/mask(例如:192.168.1.1/24)

alignment - 如何对齐点文件中的子图