【问题标题】:Graph of scikit-learn ExtraTreeClassifier and RandomForestClassifierscikit-learn ExtraTreeClassifier 和 RandomForestClassifier 的图
【发布时间】:2019-01-16 14:33:28
【问题描述】:

我正在尝试制作一些图表来说明 scikit-learn 中 RandomForestClassifier 和 ExtraTreeClassifier 之间的区别。我想我可能已经弄清楚了,但我不确定。这是我的代码来拟合和绘制虹膜数据集:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.externals.six import StringIO 
from sklearn import tree
import pydot

iris = load_iris()

X = iris.data
y = iris.target

clf = tree.ExtraTreeClassifier()

clf = clf.fit(iris.data, iris.target)


dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
file_name = "et_iris.pdf"
graph.write_pdf(file_name) 

clf = tree.DecisionTreeClassifier()

clf = clf.fit(iris.data, iris.target)


dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
file_name = "rdf_iris.pdf"
graph.write_pdf(file_name) 

这产生的图看起来是正确的,ET 图比决策树图更“笨拙”。

DecisionTreeClassifier 与 RandomForestClassifier 中的一棵树相同,而 ExtraTreeClassifier 与 ExtraTreeClassifier 中的一棵树相同,我是否正确?

有没有办法对实际 RDF 或 ET 分类器中的所有树执行此操作?我尝试在森林中使用 .estimators_,但它们似乎没有导出方法。

【问题讨论】:

    标签: python graph scikit-learn random-forest


    【解决方案1】:

    export_graphviz 不是方法,而是函数。没有一棵树“拥有”它。您可以将其与estimators_ 一起使用。 关于ExtraTreeClassifierExtraTreesClassifier 中的一棵树和DecisionTreeClassifierRandomForestClassifier 中的一棵树,你是对的。但是,这并没有真正涵盖它,因为:

    • RandomForestClassifier 为每棵树单独引导数据集,ExtraTreesClassifier 不引导(默认情况下)。

    • max_features=n_features默认用于单棵树,即所有特征都可以在每个拆分中使用。

    【讨论】:

    • 因此,如果我自己为 DecisionTreeClassifier 创建一个引导样本并输入一部分功能,它看起来是等价的。
    • 对全局特征进行二次抽样并不等效。但是您可以在树上设置 max_features:scikit-learn.org/dev/modules/generated/…(每次拆分都会对它们进行单独采样)
    • 谢谢...我得到了我想要的,这是对不同树木“外观”的比较。
    猜你喜欢
    • 2016-01-26
    • 2019-10-22
    • 2023-03-22
    • 2014-04-20
    • 2018-12-30
    • 2012-09-03
    • 2017-04-12
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多