sklearn中predict与predict_proba的区别及缺类陷阱

顾言
顾言
发布时间:2026-10-14| 3人浏览过
原创

本文详解sklearn中predict与predict_proba的区别:前者返回预测标签,后者返回各类别概率数组。重点指出当训练集缺失某些类别时,predict_proba列数会减少,导致predict结果与最大概率索引不一致。建议使用train_test_split的stratify参数保持数据分布一致,避免此类隐蔽Bug。

predict与predict_proba的基本区别

predict_proba方法输出一个n行k列的二维数组,其中k代表分类标签的数量(通常已排序)。数组中第i行第j列的值表示模型预测第i个样本属于第j个标签的概率。需要注意的是,每一行的概率值之和必须等于1。

predict方法则直接返回预测结果,即每个样本所属的具体标签类别,而非概率分布。

具体实现效果可参考下方的代码示例。


# conding :utf-8 
from sklearn.linear_model import LogisticRegression 
import numpy as np 
x_train = np.array([[1,2,3], 
          [1,3,4], 
          [2,1,2], 
          [4,5,6], 
          [3,5,3], 
          [1,7,2]]) 
 
y_train = np.array([3, 3, 3, 2, 2, 2]) 
 
x_test = np.array([[2,2,2], 
          [3,2,6], 
          [1,7,4]]) 
 
clf = LogisticRegression() 
clf.fit(x_train, y_train) 
 
# 返回预测标签 
print(clf.predict(x_test)) 
 
# 返回预测属于某标签的概率 
print(clf.predict_proba(x_test)) 
 
# [2 3 2] 
#
# [[0.56651809 0.43348191] 
# [0.15598162 0.84401838] 
# [0.86852502 0.13147498]] 
# 分析结果: 
# 标签是 2,3 共两个,所以predict_proba返回的为2列,且是排序的(第一列为标签2,第二列为标签3),
# 返回矩阵的行数是测试样本个数 因此为3行
# 预测[2,2,2]的标签是2的概率为0.56651809,3的概率为0.43348191 
# 
# 预测[3,2,6]的标签是2的概率为0.15598162,3的概率为0.84401838 
# 
# 预测[1,7,4]的标签是2的概率为0.86852502,3的概率为0.13147498 

训练集缺类导致的识别不一致陷阱

补充说明:sklearn中predict与predict_proba识别结果不一致的常见原因。

在训练决策树模型进行测试时,曾发现一个隐蔽Bug:使用predict得到的标签结果,竟然与predict_proba返回的最大概率值的索引不匹配。由于脚本逻辑需要获取模型的置信度(即类别概率),因此必须确保predict_proba能正确反映所有类别的概率分布。

经过排查发现,predict_proba输出的列数少于预期的总类别数。测试证实,这是由于训练集中部分类别的样本数量为0所致。这一现象较为隐蔽,特此记录以提醒其他开发者避开此坑。

Tip:在使用sklearn的train_test_split进行数据分割时,可以设置stratify参数,强制训练集和测试集的数据分布保持一致,从而避免因训练集缺类而导致的predict_proba列数异常问题。

以上关于sklearn中predict与predict_proba区别及缺类问题的分析即为全部内容,希望能对读者有所帮助,欢迎支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。