sklearn中DecisionTreeClassifier的predict_proba如何对输入样本X计算概率?
已训练DecisionTreeClassifier的predict_proba计算逻辑
- 第一步:样本路由到对应叶子节点
输入样本从决策树根节点出发,按照训练阶段确定的每一层分裂规则(对应特征的阈值判断)逐层向下匹配,最终唯一归属到某一个叶子节点。 - 第二步:取叶子节点预统计的类别分布作为输出概率
训练阶段每个叶子节点都会提前统计落到该节点的所有训练样本的类别占比,计算规则如下:- 无自定义权重场景:直接按「该节点内对应类别的样本数 / 节点总样本数」计算类别的概率
- 有样本权重/类别权重场景:按「该节点内对应类别的加权样本总权重 / 节点所有样本总权重」计算类别的概率
举个二分类场景的例子:某叶子节点在训练时一共落入15个训练样本,其中类别1有9个、类别0有6个,无自定义权重,那么所有落到这个叶子节点的输入样本,
predict_proba输出就是[0.4, 0.6],顺序和模型的classes_属性对应。
- 输出概率数组的顺序和模型
classes_属性存储的类别顺序完全一致,多分类场景下每个类别的概率对应其在classes_中的位置。 - scikit-learn原生实现默认没有对概率做拉普拉斯平滑,如果某叶子节点内不存在某类的训练样本,对应类别的输出概率直接为0。
内容的提问来源于stack exchange,提问作者Soumya
相关产品推荐
相关产品推荐

