我正在使用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”的条件(因为树可以嵌套)
答案 0 :(得分:1)
如果它真的是您正在寻找的小剪辑,您可以考虑使用正则表达式,例如:
\D\[\d+\]\s+<=\s+\d+\.\d+
即,“非数字字符,开括号,一些数字,近括号,空格,&lt; =符号,空格,一些数字,小数点,一些数字。”我在你的文本上测试了这个正则表达式,它与那个剪辑匹配,没有别的。