为分类树中的预测响应找到相应的样本分数 Python 2.7
Finding the corresponding sample fraction for a predicted response in classification trees Python 2.7
我知道如何使用 sklearn
来拟合一棵树。我也知道如何使用 predict
或 predict_proba
进行预测。但是,对于预测,我想获得(原始)样本分数而不是概率。
例如,在一棵拟合树中,两个叶节点对于 class A 的概率可能均为 0.2,但一个为 2/10,另一个为 400/2000。现在,如果我使用这棵树,我想得到类似 [400,2000] 或 [2,10] 而不仅仅是 0.2.
n_node_sample
和 value
属性将此类信息存储在拟合树对象中,但我不知道如何在预测中从中提取适当的值。
提前致谢。
可以使用树的tree.tree_.apply
方法找出该点结束在哪个叶子,然后使用tree.tree_.value
数组查看每个class有多少个样本在这片叶子中:
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
将 "public" 变为 tree.apply
,并将负责数据类型转换(到 float32)。参见 the docs。
我知道如何使用 sklearn
来拟合一棵树。我也知道如何使用 predict
或 predict_proba
进行预测。但是,对于预测,我想获得(原始)样本分数而不是概率。
例如,在一棵拟合树中,两个叶节点对于 class A 的概率可能均为 0.2,但一个为 2/10,另一个为 400/2000。现在,如果我使用这棵树,我想得到类似 [400,2000] 或 [2,10] 而不仅仅是 0.2.
n_node_sample
和 value
属性将此类信息存储在拟合树对象中,但我不知道如何在预测中从中提取适当的值。
提前致谢。
可以使用树的tree.tree_.apply
方法找出该点结束在哪个叶子,然后使用tree.tree_.value
数组查看每个class有多少个样本在这片叶子中:
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
将 "public" 变为 tree.apply
,并将负责数据类型转换(到 float32)。参见 the docs。