Sklearn中predict_proba函数用法及原理详解
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)={+1−1x≥0x<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+e−dis1
负类概率为:
p
r
o
b
−
=
1
−
p
r
o
b
+
prob_-=1-prob_+
prob−=1−prob+
对于多分类
二分类模型如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+e−disi1
再将其进行归一化,即得到样本为第
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)={+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
更多推荐


所有评论(0)