从随机森林中获取树木

时间:2017-07-19 10:34:25

标签: python regex graphviz random-forest

我正在使用Skleran的Random Forest Classifier。 我训练并调整了我的模型。

我的数据集包含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]&lt; = 0.4”值。我只需要知道在我的树的任何一个块中是否存在类似“X [3]&lt; = 0.4”的条件(因为树可以嵌套)

1 个答案:

答案 0 :(得分:1)

如果它真的是您正在寻找的小剪辑,您可以考虑使用正则表达式,例如:

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

即,“非数字字符,开括号,一些数字,近括号,空格,&lt; =符号,空格,一些数字,小数点,一些数字。”我在你的文本上测试了这个正则表达式,它与那个剪辑匹配,没有别的。

相关问题