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

How to determine the range of the feature values used to predict a class using Random Forest Classifier

我试图找出随机森林 classifier 用来预测某个 class.

的特征值的范围是多少

例如我们有 IRIS 数据集;

我用随机森林classifier根据花的特征来预测class花属于哪个花种,有4个特征(萼片长度,萼片宽度,花瓣长度,花瓣宽度)。

我可以找出特征的重要性,并且可以使用 Graphviz 可视化 classifier 采取的步骤。现在我想知道范围是多少,例如,萼片长度将导致预测为 Setosa,即花瓣长度在 0.2 和 0.4 之间是该物种是 Setosa 的指标。我可以使用 Graphviz 直观地查看这些数据,但我想要一种方法来存储它并使用 200 个估算器对我的整个数据集进行分析。有没有办法在决策树的下图中以文本方式收集和存储数据?如果花瓣长度 <= 2.6 那么 class 是 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 之间等

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

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

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

RandomForestClassifier of scikit-learn has an attribute called estimators_ which after training is a list of DecisionTreeClassifier 个实例共同构成了森林。

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

scikit-learn 的牛人甚至写了 documentation on how to access the tree's properties

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

如您所见at this line in the node_to_str function they take the argmax over the value variable which is defined here。我认为,如果将其与上面链接的文档结合起来,您应该能够获得每个节点的 class!