python predict_proba_浅谈sklearn中predict与predict_proba区别

predict_proba 返回的是一个 n 行 k 列的数组,列是标签(有排序), 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为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中有一个参数可以强制测试集和训练集的数据分布一致,也就不会导致缺类别的问题。

以上这篇浅谈sklearn中predict与predict_proba区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值