我知道如何使用sklearn
来拟合树。我也知道如何使用它来预测predict
或predict_proba
。然而,对于预测,我想要得到(原始)样本分数而不是概率。
例如,在一个拟合的树中,两个叶节点对a类的概率可能都是0.2,但一个是2/10,另一个是400/2000。现在,如果我使用这棵树,我想要得到像[400,2000]或[2,10]这样的东西,而不仅仅是0.2。
n_node_sample
和value
属性将这些信息存储在拟合的树对象中,但我不知道如何在预测中从中提取合适的值。
您可以使用树的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)。