Python sklearn中model.predict与predict_proba的区别解析

江岸
江岸
发布时间:2026-10-14 | 2人浏览过
原创

本文详细解析Python sklearn库中model.predict()与model.predict_proba()函数的核心区别。通过LogisticRegression示例代码,展示predict返回具体分类标签,而predict_proba返回各类别的概率分布。文章深入探讨了多分类场景下的概率输出逻辑,并解释了predict_proba结果如何依据self.classes_进行排序,帮助开发者准确理解模型输出格式。

下面直接通过代码示例进行说明。


clf=KMeans(n_clusters=5) #创建分类器对象
fit_clf=clf.fit(X) #用训练器数据拟合分类器模型
clf.predict(X) #也可以给新数据数据对其预测

print(clf.cluster_centers_) #输出5个类的聚类中心

y_pred = clf.fit_predict(X) #用训练器数据X拟合分类器模型并对训练器数据X进行预测

print(y_pred) #输出预测结果

predict与predict_proba的核心区别

补充说明:在sklearn中调用机器学习模型时,model.predict(x)与model.predict_proba(x)的功能存在显著差异。

model.predict_proba(x)与model.predict()不同,它返回的是预测为各个类别的概率值。具体而言,若存在N个分类结果,则每行输出包含N个概率值,分别对应每个类别的预测概率。例如,在0和1的二分类任务中,输出将包含两个概率值。

接下来通过具体代码实例进一步讲解。

Python 3代码实现如下:


# -*- coding: utf-8 -*-
"""
Created on Sat Jul 27 21:25:39 2019

@author: ZQQ
"""
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
import numpy as np
import warnings
warnings.filterwarnings("ignore")
# 这个方法只是解决了表面,没有根治

# 数据(特征,属性)
x_train = np.array([[1,2,3], 
          [1,5,4], 
          [2,2,2], 
          [4,5,6], 
          [3,5,4], 
          [1,7,2]]) 
# 数据的标签
y_train = np.array([1, 0, 1, 1, 0, 0]) 
 
# 测试数据
x_test = np.array([[2,1,2], 
          [3,2,6], 
          [2,6,4]]) 
 
# 导入模型
model = LogisticRegression() 
 
#model = RandomForestClassifier()

#model=XGBClassifier()

model.fit(x_train, y_train)

# 返回预测标签 
print(model.predict(x_test)) 
 
print('---------------------------------------')

# 返回预测属于某标签的概率 
print(model.predict_proba(x_test)) 
 

运行结果如下:

结果分析:

predict输出具体分类标签

使用model.predict()时:

输入[2,1,2]被预测为类别1

输入[3,2,6]被预测为类别1

输入[2,6,4]被预测为类别0

predict_proba输出类别概率

使用model.predict_proba()时:

输入[2,1,2]属于类别0的概率为0.19442289,属于类别1的概率为0.80557711

输入[3,2,6]属于类别0的概率为0.04163615,属于类别1的概率为0.95836385

输入[2,6,4]属于类别0的概率为0.83059324,属于类别1的概率为0.16940676

预测为类别0的概率值与预测为类别1的概率值之和恒等于1

同理,若标签类别增加至3类(0、1、2):

预测为类别0的概率值记为a

预测为类别1的概率值记为b

预测为类别2的概率值记为c

所有预测概率值之和满足a+b+c=1

概率输出的排序机制

注意:model.predict_proba()返回所有标签对应的可能性概率值,这些值的排序依据是什么?

该函数返回模型中每个类别的样本概率,类别顺序严格遵循self.classes_中的定义。

通常通过numpy.unique(label)方法,对label中的所有标签值进行去重并从小到大排序。

由此得到一个从小到大排列的唯一值序列,该序列直接对应model.predict_proba()输出行的顺序。

以上关于Python sklearn中model.predict与predict_proba用法的说明即为全部内容,希望能对读者有所帮助,也欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表