如何使用随机森林分类器

时间:2019-04-08 11:24:11

标签: python machine-learning scikit-learn classification random-forest

我正在尝试找出随机森林分类器用来预测某个类别的要素值的范围。

例如,我们有IRIS数据集;

我使用随机森林分类器根据花朵的特征来预测花朵属于哪一类花,共有4个特征(花冠长度,萼片宽度,花瓣长度,花瓣宽度)。

我可以找到功能的重要性,并且可以通过使用Graphviz可视化分类器采取的步骤。现在,我想找出范围是多少,例如萼片长度,这将导致预测为Setosa,即花瓣长度在0.2到0.4之间表示该物种是Setosa。我可以使用Graphviz直观地查看此数据,但是我想使用一种存储方式,并使用200个估算器对整个数据集进行分析。在决策树下方的图像中,是否有一种方法可以按文本方式收集和存储数据;如果花瓣长度<= 2.6,则该类为Setosa。

https://images.app.goo.gl/pPK1KsXAMY3z27JW8

我想要一个与此类似的数据框:

        node |   feature     | Samples | Value     | Class 
   --------------------------------------------------------------
   1.    1   |  sepal-length |    23   |  <= 0.2   | Setosa
   2.    3   |  petal-width  |    45   |  <= 0.3   | Versicolor
   3.   ...          ...         ...        ...        ...
   n.    178 |  sepal-width  |    3    |  <= 0.4   | Setosa

一旦有了一个数据框,我便可以进行分析并查看例如; Setosa花的花瓣长度在0.1-0.3之间,萼片长度在0.4-0.7之间,等等

这甚至有可能吗?如果是这样,任何想法将不胜感激。

编辑:我已经查看了每棵树的决策路径,虽然很有帮助,但它们不包含预测的类,因此对我尝试做的事情没有帮助。

我认为我唯一的选择是仅解析从Graphviz函数获得的点文件,然后将信息手动存储到数据框中。

1 个答案:

答案 0 :(得分:1)

scikit-learn的RandomForestClassifier具有一个名为estimators_的属性,经过训练后,它是DecisionTreeClassifier实例的列表,这些实例共同构成了森林。

现在,我们可以访问各个树,我们将仔细研究DecisionTreeClassifier实例。每个实例都有一个tree_属性,其中包含实际的决策树和您感兴趣的所有属性。

scikit学习的真棒人甚至写了documentation on how to access the tree's properties

我了解您需要每个节点的多数类,如graphviz可视化中那样,这不是节点上的标准属性。您提到您可以解析graphviz的输出,但是也许您可以看一下graphviz代码!

如您所见at this line in the node_to_str function,它们将argmax超过了定义的here的值变量。我认为,如果将其与上面链接的文档结合起来,则应该能够在每个节点上获得该类!