Sklearn中predict_proba函数用法及原理详解
Sklearn中predict_proba函数用法及原理详解(以logistic回归为例)
网上对predict_proba的数学原理解释的太少了,也不明确,特意总结一下,并给出有些不能用该方法的原因及对策
函数形式
- 输入:待预测的数据
- 输出:数组形式为(样本个数,样本类别数),每一行代表某个样本在各个类上的概率,其和为
1
.
用于返回样本在各个类的概率分布,不适用于分类函数为:
sign(x)={+1x≥0−1x<0sign(x)=\begin{cases}+1& \text{x$\geq$0} \\-1& \text{x$<$0}\end{cases} sign(x)={+1−1x≥0x<0
的情况,因为值是离散的无法表示概率。
数学原理
以logistic回归为例
对于二分类
其基本原理是算出样本点到分类超平面的距离disdisdis,之后带入分类函数中,得到该样本为正类的概率为
prob+=sigmoid(dis)=11+e−disprob_+ = sigmoid(dis)=\frac{1}{1+e^{-dis}} prob+=sigmoid(dis)=1+e−dis1
负类概率为:prob−=1−prob+prob_-=1-prob_+prob−=1−prob+
对于多分类
二分类模型如logistic回归进行多分类(假设k类)时,往往采用OVR方法或者OVO方法,OVR方法产生了k个独立的分类器,此时,对于此样本,算出其到k个分类器的距离disi,dis_i,disi,其中i=1,2,...ki=1,2,...ki=1,2,...k,带入分类函数sigmoid(x)sigmoid(x)sigmoid(x)中,得到:
prob+i=sigmoid(disi)=11+e−disiprob_{+i} = sigmoid(dis_i)=\frac{1}{1+e^{-dis_i}} prob+i=sigmoid(disi)=1+e−disi1
再将其进行归一化,即得到样本为第iii个类的概率:
probi=prob+i∑j=1kprob+jprob_i=\frac{prob_{+i}}{\sum_{j=1}^{k}{prob_{+j}}} probi=∑j=1kprob+jprob+i
说明
对于perceptron这种模型,不能求其概率,主要原因是其分类函数为:
xsign(x)={+1x≥0−1x<0x sign(x)=\begin{cases}+1& \text{x$\geq$0} \\-1& \text{x$<$0}\end{cases} xsign(x)={+1−1x≥0x<0
是离散的,如果非要求样本为某类的概率,可以利用lsotonic
或者sigmoid
校准分类器,其原理可以参考链接:使用 Isotonic Regression 校准分类器
,实际应用中可以采用的sklearn中模块为CalibratedClassifierCV
,具体见链接:Python Scikit-learn Perceptron Output Probabilities
[1]https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Perceptron.html
[2]https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=predict_proba#sklearn.linear_model.LogisticRegression.predict_proba
[3]http://vividfree.github.io/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/2015/12/21/classifier-calibration-with-isotonic-regression
[4]https://stackoverflow.com/questions/31792580/python-scikit-learn-perceptron-output-probabilities
Sklearn中predict_proba函数用法及原理详解相关推荐
- python中的super用法详解_python super用法及原理详解
这篇文章主要介绍了python super用法及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 概念 super作为python的内建函数. ...
- groupby的用法及原理详解
groupby的用法及原理详解_回家养老-CSDN博客_groupby 写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够sele ...
- 【夯实Spring Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)
本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...
- PHP中cal_days_in_month函数和calendar扩展详解
PHP中cal_days_in_month函数和calendar扩展详解 问题: 在开发中无意间发现cal_days_in_month函数不可使用.然后就开始研究学习. 1.cal_days_in_m ...
- python bisect_Python中bisect的用法及示例详解
bisect是python内置模块,用于有序序列的插入和查找. 查找: bisect(array, item) 插入: insort(array,item) 查找 import bisect a = ...
- python中函数分为哪四类_Python函数参数分类原理详解
1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号,隔开 案列: # 利用函数的参数,定义一个可以完成任意两个数 ...
- c语言中sign的用法,Excel教程中sign函数用法和实例详解
第一,sign函数用法说明 excel教程中sign函数用于返回数字的符号.正数为1,零为0,负数为-1. sign函数语法:SIGN(number) SIGN符号函数(一般用sign(x)表示)是很 ...
- urlencode 与urldecode 函数字符编码原理详解
中文字符编码研究系列第五期,详解 urlencode()与urldecode()函数字符编码原理,两个函数分别用于编码 URL 字符串和解码已编码的 URL 字符串,实现对中文字符的编码 <if ...
- c语言 product,product函数_Excel中product函数的使用教程详解
Excel中的product函数是用来计算各参数的乘积的,在数学公式里,我们会经常用到.下面小编教你在Excel中product函数的使用方法,希望对你有帮助! Excel中product函数的使用方 ...
最新文章
- 一. synchronized 的局限性 与 Lock 的优点
- 『全球化产品』应该要避开的几个坑
- python安装whl_EN-mysqlclient库安装问题
- nagios 监控 mysql 读写比 R/W
- 信息系统服务器备机,医院信息系统业务连续性讨论:双机热备、RAC还是x86一体机?...
- 这本《Python+TensorFlow机器学习实战》给你送到家!
- Accumulator
- Spring与Struts框架整合
- owncloud mysql版本_Linux Deploy Owncloud php7.0+apache2+mysql5.7+owncloud9.1
- 星尘小组第十一周翻译-设计和优化索引
- mysql在linux下的完整安装
- SAS入门之(四)改变数据类型
- RDKit | 基于RDKit 的化合物预处理
- 产品需求分析神器:KANO模型分析法
- HashMap源码分析与实现
- ConneR and the A.R.C. Markland-N--- codeforces1293A
- OR1200处理器的计时器模块TT介绍
- 基于Ubuntu搭建CTFd平台(全网最全)
- 什么是TikTok云控
- Smarty-3.1.12配置