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打造出适合自己的定制化Eclipse IDE
Mar 02 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
Python数据分析之真实IP请求Pandas详解
Nov 18 Python
Python算法应用实战之栈详解
Feb 04 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
python如何将图片转换为字符图片
Aug 19 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
python集合常见运算案例解析
Oct 17 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Python实现粒子群算法的示例
Feb 14 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调用三种数据库的方法(2)
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
javascript学习笔记(一)基础知识
2014/09/30 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
layui.use模块外部使用其内部定义的js封装函数方法
2019/09/16 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python 判断是否为质数或素数的实例
2017/10/30 Python
python实现redis三种cas事务操作
2017/12/19 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
python实现反转部分单向链表
2018/09/27 Python
python numpy元素的区间查找方法
2018/11/14 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python之array赋值技巧分享
2019/11/28 Python
Python urllib3软件包的使用说明
2020/11/18 Python
详解用 python-docx 创建浮动图片
2021/01/24 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
关爱女孩行动实施方案
2014/03/13 职场文书
演讲主持词
2014/03/18 职场文书
公司保洁员管理制度
2015/08/04 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
用python修改excel表某一列内容的操作方法
2021/06/11 Python