如何在Scikit-learn中实现基于叶子样本的随机森林自定义概率计算
自定义随机森林二分类概率计算(Scikit-learn)
我正在使用Python和Scikit-learn构建二分类随机森林模型,希望获取测试集样本属于两类标签之一的自定义概率。
默认predict_proba(Xtest)的计算逻辑为:
选某类的树数量 / 总树数量
我认为该方式精度不足,因为部分决策树节点可能将非确定性样本划分至精度差异较大的叶子节点(如100个A类、0个B类的叶子,或5个A类、3个B类的叶子)。
我期望的自定义概率计算方式:以所有分类器输出叶子节点的总样本数为分母,以这些叶子节点中目标类的总样本数为分子(即使部分树的输出叶子节点选择了多数树未选的类别)。
示例说明
默认predict_proba计算结果
假设有2棵树:
Tree 1: --- 5, 0 Class A (被选中) 10 --- 2, 3 Class B (未被选中) Tree 2: --- 3, 2 Class A (被选中) 10 --- 5, 0 Class B (未被选中)
默认计算结果:
选Class A的树数量(2) / 总树数量(2) = 1.0
期望的自定义计算结果
所有输出叶子中Class A的样本总数(8) / 所有输出叶子的总样本数(10) = 0.8
问题
- 有没有现成的实现方法或可用工具来实现这种自定义概率计算?
- 我曾考虑遍历每棵树并获取其概率后取平均,但这会给样本量较少的叶子节点带来更高偏差(类似选举人团机制),并非最优解。
- 如何直接访问决策树中特定样本所在输出叶子节点的样本数及类别分布?或者至少获取叶子节点的索引?对于随机森林,如何对这些值进行求和与计算?
- 若Scikit-learn无法实现,是否需要更换平台/库?或只能增加分类器数量(非最优方案)?
参考文档片段
dtc.tree_.n_node_samples dtc.tree_[node_index].n_node_samples ?
内容的提问来源于stack exchange,提问作者cheese_guy
相关产品推荐
相关产品推荐

