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?1?x≥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?disi?1?
再將其進行歸一化,即得到樣本為第iii個類的概率:
probi=prob+i∑j=1kprob+jprob_i=\frac{prob_{+i}}{\sum_{j=1}^{k}{prob_{+j}}} probi?=∑j=1k?prob+j?prob+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?1?x≥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 HTMLParser
- 下一篇: Java中的反射用法