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 相关文章推荐
Android应用开发中Action bar编写的入门教程
Feb 26 Python
python语言使用技巧分享
May 31 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
python3之模块psutil系统性能信息使用
May 30 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
django中media媒体路径设置的步骤
Nov 15 Python
Django xadmin开启搜索功能的实现
Nov 15 Python
pytorch点乘与叉乘示例讲解
Dec 27 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
python 如何获取页面所有a标签下href的值
May 06 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 session和cookie使用说明
2010/04/07 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
jQuery使用方法
2017/02/04 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
解决vue的过渡动画无法正常实现问题
2019/10/31 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
在SAE上部署Python的Django框架的一些问题汇总
2015/05/30 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
使用Python & Flask 实现RESTful Web API的实例
2017/09/19 Python
django站点管理详解
2017/12/12 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
Python实现登陆文件验证方法
2018/10/06 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
为什么python比较流行
2020/06/19 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
计算机专业自荐信
2013/10/14 职场文书
化验室技术员岗位职责
2013/12/24 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
自主招生教师推荐信
2014/05/10 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
家庭困难证明
2014/10/12 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
清洁工工作总结
2015/08/11 职场文书