导出/绘制随机森林决策树/“RandomForestClassifier”对象没有属性“tree_”

Posted

技术标签:

【中文标题】导出/绘制随机森林决策树/“RandomForestClassifier”对象没有属性“tree_”【英文标题】:Export / Plot Random Forest Decision Tree / 'RandomForestClassifier' object has no attribute 'tree_' 【发布时间】:2022-01-12 02:39:32 【问题描述】:

大家晚上好

这篇文章的目标是能够从随机决策树过程中绘制决策树。运行不同的选项后,我总是遇到下一个错误:'RandomForestClassifier' object has no attribute 'tree_'

非常感谢能够解决这种情况的任何帮助/代码示例/想法或链接。

在下一组代码中,我是如何绘制常规/正常决策树的。

clf_SMOTE1 = DecisionTreeClassifier(criterion='entropy',max_depth=4, min_samples_leaf=7)
clf_SMOTE1
    
clf_SMOTE1 = clf_SMOTE1.fit(X_train, Y_train)
    
a = df.columns[6:]
dot_data = tree.export_graphviz(clf_SMOTE1, out_file=None, filled=False, feature_names= a)
graphviz.Source(dot_data)

在接下来的几行中,我尝试了不同的尝试,但没有结果。

clf_SMOTE2 = RandomForestClassifier(criterion='entropy', bootstrap = True, max_depth=4, min_samples_leaf=7)
clf_SMOTE2
    
clf_SMOTE2 = clf_SMOTE2.fit(X_train, Y_train)

a = df.columns[6:]
dot_data_2 = tree.export_graphviz (clf_SMOTE2, out_file=None, feature_names = a, precision = 2, filled = False)
graphviz.Source(dot_data_2)

选项 2:

clf_SMOTE2 = RandomForestClassifier(criterion='entropy', bootstrap = True, max_depth=4, min_samples_leaf=7)
clf_SMOTE2
        
clf_SMOTE2 = clf_SMOTE2.fit(X_train, Y_train)
    
    
a = df.columns[6:]
dot_data_2 = tree.plot_tree(clf_SMOTE2,  model.estimators_[5], feature_names= a)
graphviz.Source(dot_data_2)

【问题讨论】:

【参考方案1】:

来自help page:

随机森林是一种适合多种决策的元估计器 数据集各个子样本上的树分类器

所以你不能在RandomForestClassifier 对象上应用export_graphviz。您需要访问存储在estimators_ 下的决策树之一:

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.tree import export_graphviz
import pandas as pd

X,y = make_classification()
X = pd.DataFrame(X,columns = ['col'+str(i) for i in range(X.shape[1])])

clf = RandomForestClassifier(criterion='entropy', bootstrap = True, 
max_depth=4, min_samples_leaf=7)
clf = clf.fit(X, y)

这里我们只访问第一个决策树,从 100 个中:

len(clf.estimators_)
100

dot_data_2 = export_graphviz(clf.estimators_[0], out_file=None, 
feature_names = X.columns, precision = 2, filled = False)

【讨论】:

非常感谢!!!!最后一个问题,我假设每棵树在准确度/精度/召回率/f1-score 方面都在增长。为了获得最精确的树,我应该选择 clf.estimators_[100] 吗?或者我需要调用一个函数以获得最准确的函数? 不,它在准确性方面没有增长。随机森林包预测

以上是关于导出/绘制随机森林决策树/“RandomForestClassifier”对象没有属性“tree_”的主要内容,如果未能解决你的问题,请参考以下文章

将随机森林变成决策树 - 在 R 中使用 randomForest 包

决策树算法之随机森林

10、决策树集成--随机森林

决策树、随机森林

决策树与随机森林

决策树随机森林结果可视化