sklearn的predict_proba使用说明


Posted in Python onJune 28, 2020

发现个很有用的方法——predict_proba

今天在做数据预测的时候用到了,感觉很不错,所以记录分享一下,以后可能会经常用到。

我的理解:predict_proba不同于predict,它返回的预测值为,获得所有结果的概率。(有多少个分类结果,每行就有多少个概率,以至于它对每个结果都有一个可能,如0、1就有两个概率)

举例:

获取数据及预测代码:

from sklearn.linear_model import LogisticRegression
import numpy as np
 
train_X = np.array(np.random.randint(0,10,size=30).reshape(10,3))
train_y = np.array(np.random.randint(0,2,size=10))
test_X = np.array(np.random.randint(0,10,size=12).reshape(4,3))
 
model = LogisticRegression()
model.fit(train_X,train_y)
test_y = model.predict_proba(test_X)
 
print(train_X)
print(train_y)
print(test_y)

训练数据

[[2 9 8]
 [0 8 5]
 [7 1 2]
 [8 4 6]
 [8 8 3]
 [7 2 7]
 [6 4 3]
 [1 4 4]
 [1 9 3]
 [3 4 7]]

训练结果,与训练数据一一对应:

[1 1 1 0 1 1 0 0 0 1]

测试数据:

[[4 3 0]  #测试数据
 [3 0 4]
 [2 9 5]
 [2 8 5]]

测试结果,与测试数据一一对应:

[[0.48753831 0.51246169] 
 [0.58182694 0.41817306]
 [0.85361393 0.14638607]
 [0.57018655 0.42981345]]

可以看出,有四行两列,每行对应一条预测数据,两列分别对应 对于0、1的预测概率(左边概率大于0.5则为0,反之为1)

我们来看看使用predict方法获得的结果:

test_y = model.predict(test_X)
print(test_y)

输出结果:[1,0,0,0]

所以有的情况下predict_proba还是很有用的,它可以获得对每种可能结果的概率,使用predict则是直接获得唯一的预测结果,所以在使用的时候,应该灵活使用。

补充一个知识点:关于预测结果标签如何与原来标签相对应

predict_proba返回所有标签值可能性概率值,这些值是如何排序的呢?

返回模型中每个类的样本概率,其中类按类self.classes_进行排序。

其中关键的步骤为numpy的unique方法,即通过np.unique(Label)方法,对Label中的所有标签值进行从小到大的去重排序。得到一个从小到大唯一值的排序。这也就对应于predict_proba的行返回结果。

补充知识: python sklearn decision_function、predict_proba、predict

看代码~

import matplotlib.pyplot as plt
import numpy as np
from sklearn.svm import SVC
X = np.array([[-1,-1],[-2,-1],[1,1],[2,1],[-1,1],[-1,2],[1,-1],[1,-2]])
y = np.array([0,0,1,1,2,2,3,3])
# y=np.array([1,1,2,2,3,3,4,4])
# clf = SVC(decision_function_shape="ovr",probability=True)
clf = SVC(probability=True)
clf.fit(X, y)
print(clf.decision_function(X))
'''
对于n分类,会有n个分类器,然后,任意两个分类器都可以算出一个分类界面,这样,用decision_function()时,对于任意一个样例,就会有n*(n-1)/2个值。
任意两个分类器可以算出一个分类界面,然后这个值就是距离分类界面的距离。
我想,这个函数是为了统计画图,对于二分类时最明显,用来统计每个点离超平面有多远,为了在空间中直观的表示数据以及画超平面还有间隔平面等。
decision_function_shape="ovr"时是4个值,为ovo时是6个值。
'''
print(clf.predict(X))
clf.predict_proba(X) #这个是得分,每个分类器的得分,取最大得分对应的类。
#画图
plot_step=0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),
           np.arange(y_min, y_max, plot_step))
 
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) #对坐标风格上的点进行预测,来画分界面。其实最终看到的类的分界线就是分界面的边界线。
Z = Z.reshape(xx.shape)
cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
plt.axis("tight")
 
class_names="ABCD"
plot_colors="rybg"
for i, n, c in zip(range(4), class_names, plot_colors):
  idx = np.where(y == i) #i为0或者1,两个类
  plt.scatter(X[idx, 0], X[idx, 1],
        c=c, cmap=plt.cm.Paired,
        label="Class %s" % n)
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.legend(loc='upper right')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Decision Boundary')
plt.show()

sklearn的predict_proba使用说明

以上这篇sklearn的predict_proba使用说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现在线程里运行scrapy的方法
Apr 07 Python
python生成器表达式和列表解析
Mar 10 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
Python BS4库的安装与使用详解
Aug 08 Python
使用numba对Python运算加速的方法
Oct 15 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 Python
python判断无向图环是否存在的示例
Nov 22 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
Selenium 滚动页面至元素可见的方法
Mar 18 Python
python 爬取腾讯视频评论的实现步骤
Feb 18 Python
基于python实现ROC曲线绘制广场解析
Jun 28 #Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 #Python
浅谈sklearn中predict与predict_proba区别
Jun 28 #Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 #Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 #Python
PyTorch的torch.cat用法
Jun 28 #Python
使用pytorch 筛选出一定范围的值
Jun 28 #Python
You might like
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
javascript中HTMLDOM操作详解
2014/12/11 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python编写简单的HTML页面合并脚本
2016/07/11 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
分享一个python的aes加密代码
2020/12/22 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
德国网上花店:Valentins
2018/08/15 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
高中生的自我鉴定范文
2014/01/24 职场文书
学生自我评价范文
2014/02/02 职场文书
领导班子个人对照检查剖析材料
2014/09/29 职场文书
小学家长意见怎么写
2015/06/03 职场文书
民政局未婚证明
2015/06/15 职场文书
恋恋笔记本观后感
2015/06/16 职场文书
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL
mysql insert 存在即不插入语法说明
2022/03/25 MySQL