sklearn中调用某个机器学习模型model.predict(x)和model.predict_proba(x)的区别

model.predict_proba(x)不同于model.predict(),它返回的预测值为获得所有结果的概率。(有多少个分类结果,每行就有多少个概率,对每个结果都有一个概率值,如0、1两分类就有两个概率)
我们直接上代码,通过具体例子来进一步讲解:
python3 代码实现:

# -*- 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))  
  

运行结果:
在这里插入图片描述

分析结果:
使用model.predict() :
预测[2,1,2]为1类
预测[3,2,6]为1类
预测[2,6,4]为0类

使用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()的行返回结果。

参考和引用:
https://blog.csdn.net/m0_37870649/article/details/79549142

https://blog.csdn.net/qq_36523839/article/details/80405455

仅用来个人学习和分享,如若侵权,留言立删。

尊重他人知识产权,不做拿来主义者!

喜欢的可以关注我哦QAQ,

你的关注和喜欢就是我write博文的动力。

猜你喜欢

转载自blog.csdn.net/AugustMe/article/details/97578123