在分类树中找到预测响应的相应样本分数



我知道如何使用sklearn来拟合树。我也知道如何使用它来预测predictpredict_proba。然而,对于预测,我想要得到(原始)样本分数而不是概率。

例如,在一个拟合的树中,两个叶节点对a类的概率可能都是0.2,但一个是2/10,另一个是400/2000。现在,如果我使用这棵树,我想要得到像[400,2000]或[2,10]这样的东西,而不仅仅是0.2。

n_node_samplevalue属性将这些信息存储在拟合的树对象中,但我不知道如何在预测中从中提取合适的值。

您可以使用树的tree.tree_.apply方法来找出该点最终在哪个叶子中,然后使用tree.tree_.value数组来检查每个类在该叶子中有多少个样本:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
tree = DecisionTreeClassifier(max_depth=2).fit(iris.data, iris.target)
leaf = tree.tree_.apply(iris.data[50:51].astype(np.float32))
print(leaf)
# output [3]
print(tree.tree_.value[leaf])
# output [[[  0.  49.   5.]]]
print(tree.predict_proba(iris.data[50:51]))
# output [[ 0.          0.90740741  0.09259259]]

在下一个0.17版本中,tree.tree_.apply将作为tree.apply"公共",并将负责数据类型转换(到float32)。

相关内容

  • 没有找到相关文章