如何使用随机森林分类器确定用于预测类别的特征值的范围

cod*_*her 5 python classification machine-learning random-forest scikit-learn

我试图找出随机森林分类器用来预测某个类别的特征值的范围。

例如,我们有 IRIS 数据集;

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

我可以找出特征的重要性,并且可以使用 Graphviz 将分类器所采取的步骤可视化。现在我想找出范围是什么,例如,将导致预测为 Setosa 的萼片长度,即 0.2 和 0.4 之间的花瓣长度是该物种是 Setosa 的指标。我可以使用 Graphviz 直观地查看这些数据,但我想要一种方法来存储它并使用 200 个估计器为我的整个数据集分析它。有没有办法在决策树的下图中以文本方式收集和存储数据;如果 petal-length <= 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

zee*_*onk 1

scikit RandomForestClassifier-learn 有一个属性,训练后是一起组成森林的实例estimators_列表。DecisionTreeClassifier

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

scikit-learn 的优秀人员甚至编写了有关如何访问树的属性的文档

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

正如您在node_to_str函数中的这一行看到的,它们采用此处定义的值变量的 argmax 。我认为如果将其与上面链接的文档结合起来,您应该能够获取每个节点的类!