網站首頁 編程語言 正文
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?1?x≥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?disi?1?
再將其進行歸一化,即得到樣本為第
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=1k?prob+j?prob+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?1?x≥0x<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
相關推薦
- 2022-03-18 C語言實現一個閃爍的圣誕樹_C 語言
- 2022-07-02 Python遠程SSH庫Paramiko詳細操作_python
- 2023-07-09 Hive常見時間日期函數的使用與問題整理
- 2022-02-02 element ui el-dialog 居中,并且內容多的時候內部可以滾動
- 2022-07-29 C++超詳細講解數組操作符的重載_C 語言
- 2022-11-07 使用react-native-doc-viewer實現文檔預覽_React
- 2022-03-24 詳析C#的協變和逆變_C#教程
- 2023-06-18 C#?整數轉二進制字符串方式_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支