如何使用随机森林分类器确定用于预测 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!
我试图找出随机森林 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!