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代码做configure文件
Jul 20 Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 Python
Python微信公众号开发平台
Jan 25 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
tensorflow 输出权重到csv或txt的实例
Jun 14 Python
Python unittest单元测试框架总结
Sep 08 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
如何在python中实现随机选择
Nov 02 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
Django-imagekit的使用详解
Jul 06 Python
Django正则URL匹配实现流程解析
Nov 13 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 获取select下拉列表框的值
2010/05/08 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
javascript常见用法总结
2014/05/22 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
Bootstrap table使用方法详细介绍
2016/12/09 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
Python学习笔记之os模块使用总结
2014/11/03 Python
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
Python简单读取json文件功能示例
2017/11/30 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python五子棋游戏的设计与实现
2019/06/18 Python
python实现倒计时小工具
2019/07/29 Python
pywinauto自动化操作记事本
2019/08/26 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
如何定义TensorFlow输入节点
2020/01/23 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
英国最大的独立家具零售商:Furniture Village
2016/09/06 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
英国户外服装品牌:Craghoppers
2019/04/25 全球购物
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
销售演讲稿范文
2014/01/08 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
在CSS中使用when/else的方法
2022/01/18 HTML / CSS
使用python创建股票的时间序列可视化分析
2022/03/03 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android