我在Python中使用scikit-learn来运行RandomForestClassifier()
。因为我想可视化随机森林以实现不同特征之间的相关性,所以我使用export_graphviz()
来实现这一目标。
estimator1 = best_model1.estimators_[0]
from sklearn.tree import export_graphviz
export_graphviz(estimator1,
'tree_from_optimized_forest.dot',
rounded = True,
feature_names=X_train.columns,
class_names = ["No", "Yes"],
filled = True)
from subprocess import call
call(['dot', '-Tpng', 'tree_from_optimized_forest.dot', '-o', 'tree_from_optimized_forest.png', '-Gdpi=200'])
from IPython.display import Image
Image('tree_from_optimized_forest.png', "w")
然而,与决策树不同,随机森林将产生许多树,这取决于n_estimators
中RandomForestClassifier()
的数量。
best_model1 = RandomForestClassifier(n_estimators= 100,
criterion='gini',
random_state= 42,
)
此外,因为DecisionTreeClassifier()
使用所有样本只生成一棵树,我们可以直接解释这棵树上的结果。
相反,随机森林训练成几棵不同的树,然后在这些树内投票决定结果。此外,这些树的内容是不同的,因为随机森林有Bootstrap,Bagging,Out-of-bag ......等方法。
因此,我想问一下,如果我只根据RandomForestClassifier()
的结果可视化其中一棵树,那么这棵树是否具有一定的参考值?
我可以直接解释这棵树的内容作为整个数据的分析结果吗?如果不是,DecisionTreeClassifier()
是否是通过可视化图像分析特征之间相关性的唯一方法?
非常感谢!!
在机器学习中,模型的解释能力和复杂性之间始终存在这种关系,而你的帖子与此直接相关。
一些非常简单但被强烈用于解释能力的模型是决策树,但由于它们不够复杂(遭受偏见),它们通常无法学习非常复杂的功能,因此人们想出了随机森林分类器。随机森林减少了香草决策树的偏差并增加了更多的方差,但不幸的是,在这个过程中,它们带走了直接的解释能力属性。
然而,仍然有一些工具可以帮助您获得对学习功能和功能的贡献的一些见解,其中一个工具是treeinterpreter
,你可以在这个article中了解更多。