学无先后,达者为师

网站首页 编程语言 正文

Sklearn中predict_proba函数用法及原理详解

作者:taotaoiit 更新时间: 2022-10-14 编程语言

Sklearn中predict_proba函数用法及原理详解(以logistic回归为例)

网上对predict_proba的数学原理解释的太少了,也不明确,特意总结一下,并给出有些不能用该方法的原因及对策

函数形式

在这里插入图片描述

  • 输入:待预测的数据
  • 输出:数组形式为(样本个数,样本类别数),每一行代表某个样本在各个类上的概率,其和为1.

用于返回样本在各个类的概率分布,不适用于分类函数为:
s i g n ( x ) = { + 1 x ≥ 0 − 1 x < 0 sign(x)=\begin{cases}+1& \text{x$\geq$0} \\-1& \text{x$<$0}\end{cases} sign(x)={+11x0x<0
的情况,因为值是离散的无法表示概率。

数学原理

以logistic回归为例

对于二分类

其基本原理是算出样本点到分类超平面的距离 d i s dis dis,之后带入分类函数中,得到该样本为正类的概率为
p r o b + = s i g m o i d ( d i s ) = 1 1 + e − d i s prob_+ = sigmoid(dis)=\frac{1}{1+e^{-dis}} prob+=sigmoid(dis)=1+edis1
负类概率为: p r o b − = 1 − p r o b + prob_-=1-prob_+ prob=1prob+

对于多分类

二分类模型如logistic回归进行多分类(假设k类)时,往往采用OVR方法或者OVO方法,OVR方法产生了k个独立的分类器,此时,对于此样本,算出其到k个分类器的距离 d i s i , dis_i, disi,其中 i = 1 , 2 , . . . k i=1,2,...k i=1,2,...k,带入分类函数 s i g m o i d ( x ) sigmoid(x) sigmoid(x)中,得到:
p r o b + i = s i g m o i d ( d i s i ) = 1 1 + e − d i s i prob_{+i} = sigmoid(dis_i)=\frac{1}{1+e^{-dis_i}} prob+i=sigmoid(disi)=1+edisi1
再将其进行归一化,即得到样本为第 i i i个类的概率:
p r o b i = p r o b + i ∑ j = 1 k p r o b + j prob_i=\frac{prob_{+i}}{\sum_{j=1}^{k}{prob_{+j}}} probi=j=1kprob+jprob+i

说明

对于perceptron这种模型,不能求其概率,主要原因是其分类函数为:
x s i g n ( x ) = { + 1 x ≥ 0 − 1 x < 0 x sign(x)=\begin{cases}+1& \text{x$\geq$0} \\-1& \text{x$<$0}\end{cases} xsign(x)={+11x0x<0
是离散的,如果非要求样本为某类的概率,可以利用lsotonic或者sigmoid校准分类器,其原理可以参考链接:[使用 Isotonic Regression 校准分类器](使用 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

原文链接:https://blog.csdn.net/weixin_45804601/article/details/127287406

栏目分类
最近更新