sklearn中OneVsRestClassifier对分类与独热编码标签的概率差异疑问
问题解答:OneVsRestClassifier不同标签输入的概率差异原理
核心差异来源:任务类型自动判定
sklearn的OneVsRestClassifier会根据输入标签y的格式自动判定任务类型,两种场景的概率输出逻辑完全不同:
- 传入1维原始分类标签(如鸢尾花的
[0,1,2]):判定为多分类任务,要求样本属于且仅属于一个类别 - 传入2维独热编码标签(如
pd.get_dummies输出的矩阵):判定为多标签分类任务,允许样本同时属于多个类别
两种场景的概率计算逻辑
1. 多分类任务(原始标签输入)
每个二分类器的训练逻辑确实是区分当前类和其他所有类,得到每个类的原始正类概率后,predict_proba会对每个样本的所有类概率做行归一化:
归一化后概率 = 单类原始概率 / 所有类原始概率之和
所以最终输出的每个样本各类别概率加和恒为1,和你测试的结果一致。
2. 多标签任务(独热标签输入)
多标签场景下每个类的判定是独立的,不需要满足类别互斥要求,所以predict_proba直接输出每个二分类器的原始正类概率,不会做归一化处理。每个概率代表样本独立属于该类的可能性,互相之间没有约束,所以加和可以大于1或小于1,符合你测试的结果。
补充验证
你可以手动对独热标签场景输出的y_prob2做行归一化,得到的结果会和y_prob1几乎一致:
比如你测试输出的第一行[0.00017194, 0.20430011, 0.98066319],求和得到≈1.1851,每个值除以总和后得到[0.000145, 0.1724, 0.8275],和y_prob1的第一行完全匹配。
内容的提问来源于stack exchange,提问作者user5843090
相关产品推荐
相关产品推荐

