<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 獨家 | Python的“predict_prob”方法不能真實(shí)反映預測概率校準(如何實(shí)現校準)

獨家 | Python的“predict_prob”方法不能真實(shí)反映預測概率校準(如何實(shí)現校準)

發(fā)布人:數據派THU 時(shí)間:2021-05-26 來(lái)源:工程師 發(fā)布文章

作者:  Samuele Mazzanti

翻譯:歐陽(yáng)錦    

校對:王可汗

1.png

圖源自作者

數據科學(xué)家通常根據準確性或準確性來(lái)評估其預測模型,但幾乎不會(huì )問(wèn)自己:

“我的模型能夠預測實(shí)際概率嗎?”

但是,從商業(yè)的角度來(lái)看,準確的概率估計是非常有價(jià)值的(準確的概率估計有時(shí)甚至比好的精度更有價(jià)值)。來(lái)看一個(gè)例子。

想象一下,你的公司正在出售2個(gè)杯子,一個(gè)是普通的白色杯子,而另一個(gè)則上面印有小貓的照片。你必須決定向這位給定的客戶(hù)展示哪個(gè)杯子。為此,你需要預測給定的用戶(hù)購買(mǎi)每個(gè)杯子的可能性。因此,你訓練了幾個(gè)不同的模型,你會(huì )得到以下結果:

2.png

具有相同ROC(receiver operating characteristic)但校準不同的模型。[圖源自作者]

現在,你會(huì )向該用戶(hù)推薦哪個(gè)杯子?

以上兩種模型都認為用戶(hù)更有可能購買(mǎi)普通馬克杯(因此,模型A和模型B在ROC曲線(xiàn)下具有相同的面積,因為這個(gè)指標僅僅對分類(lèi)進(jìn)行評估)。

但是,根據模型A,你可以通過(guò)推薦普通馬克杯來(lái)最大化預期的利潤,然而根據模型B,小貓馬克杯可以最大化預期的利潤。

在像這樣的現實(shí)應用中,搞清楚哪種模型能夠估算出更好的概率是至關(guān)重要的事情。

在本文中,我們將了解如何度量概率的校準(包括視覺(jué)和數字),以及如何“糾正”現有模型以獲得更好的概率。

“predict_proba”的問(wèn)題

Python中所有最流行的機器學(xué)習庫都有一種稱(chēng)為“ predict_proba”的方法:Scikit-learn(例如LogisticRegression,SVC,RandomForest等),XGBoost,LightGBM,CatBoost,Keras…

但是,盡管它的名字是預測概率,“predict_proba”并不能完全預測概率。實(shí)際上,不同的研究(尤其是這個(gè)研究和這個(gè)研究)表明,最為常見(jiàn)的預測模型并沒(méi)有進(jìn)行校準。

數值在0與1之間不代表它就是概率!

但是,什么時(shí)候可以說(shuō)一個(gè)數值實(shí)際上代表概率呢?

想象一下,你已經(jīng)訓練了一種預測模型來(lái)預測患者是否會(huì )患上癌癥。如果對于給定的患者,模型預測的概率為5%。原則上,我們應該在多個(gè)平行宇宙中觀(guān)察同一位患者,并查看其實(shí)際上患上癌癥的頻率是否為5%。

但是這種觀(guān)察條件這是不可能發(fā)生的事,所以最好的替代方法是將所有概率在5%附近的患者都接受治療,并計算其中有多少人真的患了癌癥。如果觀(guān)察到的患癌百分比實(shí)際上接近5%,則可以說(shuō)該模型提供的概率是“已校準”的。

當預測的概率反映了真實(shí)情況的潛在概率時(shí),這些預測概率被稱(chēng)為“已校準”。

那么,如何檢查一個(gè)模型是否已校準?

校準曲線(xiàn)

評估一個(gè)模型校準的最簡(jiǎn)單的方法是通過(guò)一個(gè)稱(chēng)為“校準曲線(xiàn)”的圖(也稱(chēng)為“可靠性圖”,reliability diagram)。

這個(gè)方法主要是將觀(guān)察到的結果通過(guò)概率劃分為幾類(lèi)(bin)。因此,屬于同一類(lèi)的觀(guān)測值具有相近的概率。在這一點(diǎn)上,對于每個(gè)類(lèi),校準曲線(xiàn)將預測這個(gè)類(lèi)的平均值(即預測概率的平均值),然后將預測概率的平均值與理論平均值(即觀(guān)察到的目標變量的平均值)進(jìn)行比較。

Scikit-learn通過(guò)“ calibration_curve”函數可以完成所有這些工作:

3.png

你只需要確定類(lèi)的數量和以下兩者之間的分類(lèi)策略(可選)即可:

  • “uniform”,一個(gè)0-1的間隔被分為n_bins個(gè)類(lèi),它們都具有相同的寬度;

  • “quantile”,類(lèi)的邊緣被定義,從而使得每個(gè)類(lèi)都具有相同數量的觀(guān)測值。

4.png

 分類(lèi)策略,分類(lèi)數量為7。[圖源自作者]

出于繪圖目的,本人更喜歡“quantile”的分類(lèi)策略。實(shí)際上,“uniform”分類(lèi)可能會(huì )引起誤導,因為有些類(lèi)中可能只包含很少的觀(guān)察結果。

Numpy函數給每個(gè)分類(lèi)返回兩個(gè)數組,每個(gè)數組包含平均概率和目標變量的平均值。因此,接下來(lái)要做的就是繪制它們:

5.png

假設你的模型具有良好的精度,則校準曲線(xiàn)將單調增加。但這并不意味著(zhù)模型已被正確校準。實(shí)際上,只有在校準曲線(xiàn)非常接近等分線(xiàn)時(shí)(即下圖中的灰色虛線(xiàn)),您的模型才能得到很好的校準,因為這將意味著(zhù)預測概率基本上接近理論概率。

讓我們看一些校準曲線(xiàn)的常見(jiàn)類(lèi)型的例子,它們表明了模型的校準錯誤:

6.png

錯誤校準的常見(jiàn)示例。 [圖源自作者]

最常見(jiàn)的錯誤校準類(lèi)型為:

  • 系統高估。與真實(shí)分布相比,預測概率的分布整體偏右。當您在正數極少的不平衡數據集上訓練模型時(shí),這種錯誤校準很常見(jiàn)。(如紅線(xiàn))

  • 系統低估。與真實(shí)分布相比,預測概率的分布整體偏左。(如藍線(xiàn))

  • 分布中心太重。當“支持向量機和提升樹(shù)之類(lèi)的算法趨向于將預測概率推離0和1”(引自《Predicting good probabilities with supervised learning》)時(shí),就會(huì )發(fā)生這類(lèi)錯誤校準。(如綠線(xiàn))

  • 分布的尾巴太重。例如,“其他方法(如樸素貝葉斯)具有相反的偏差(bias),并且傾向于將預測概率趨近于0和1”(引自《Predicting good probabilities with supervised learning》)。(如黑線(xiàn))

如何解決校準錯誤(Python)

假設你已經(jīng)訓練了一個(gè)分類(lèi)器,該分類(lèi)器會(huì )產(chǎn)生準確但未經(jīng)校準的概率。概率校準的思想是建立第二個(gè)模型(稱(chēng)為校準器),校準器模型能夠將你訓練的分類(lèi)器“校準”為實(shí)際概率。

請注意,用于訓練的第一個(gè)分類(lèi)器的數據不能被用于校準。

7.png

通過(guò)兩步法進(jìn)行概率校準。 [圖源自作者]

因此,校準包括了將一個(gè)一維矢量(未校準概率)轉換為另一個(gè)一維矢量(已校準概率)的功能。

兩種常被用作校準器的方法:

  • 保序回歸。一種非參數算法,這種非參數算法將非遞減的自由格式行擬合到數據中。行不會(huì )減少這一事實(shí)是很重要的,因為它遵從原始排序。

  • 邏輯回歸。

看看使用Python如何在玩具數據集中實(shí)際應用校準器:

8.png

首先,需要擬合一個(gè)分類(lèi)器。這里使用隨機森林(或者任何具有“predict_proba”方法的模型都可以)。

9.png

然后,使用分類(lèi)器的輸出(在驗證數據集上)來(lái)擬合校準器,并最終預測測試數據集的概率。

保序回歸

10.png

邏輯回歸

現在有三種選擇來(lái)預測概率:

1. 普通隨機森林,

2. 隨機森林 + 保序回歸,

3. 隨機森林 + 邏輯回歸。

但是,我們如何評估最校準的是哪一個(gè)呢?

量化校準錯誤

每個(gè)人都喜歡圖片展示的量化效果。但是除了校準圖外,我們還需要一種定量的方法來(lái)測量校準。最常用的方法稱(chēng)為“預期校準誤差(Expected Calibration Error)”,這個(gè)方法回答了下面的問(wèn)題:

我們模型的預測概率與真實(shí)概率平均相距多遠?

以一個(gè)分類(lèi)器為例:

11.png

對單個(gè)類(lèi)別(bin)的校準。[圖源自作者]

定義單個(gè)類(lèi)別(bin)的校準誤差很容易:即為預測概率的平均值與同一類(lèi)別(bin)內的正數所占百分比的絕對差值。

如果考慮一下這個(gè)定義,它非常直觀(guān)且符合邏輯。取一個(gè)類(lèi)別(bin),并假設其預測概率的平均值為25%。因此,我們預計該類(lèi)別中的正數所占百分比大約等于25%。如果這個(gè)百分比離25%越遠,意味著(zhù)這個(gè)類(lèi)別(bin)的校準就越差。

因此,預期校準誤差(Expected Calibration Error, ECE)是單個(gè)類(lèi)別的校準誤差的加權平均值,其中每個(gè)類(lèi)別的權重與它包含的觀(guān)測值的數量成正比:

12.png

預期校準誤差(ECE)[圖源自作者]

其中b標識一個(gè)類(lèi)別(bin),B是類(lèi)別(bin)的數量。注意,分母只是樣本總數。

但是這個(gè)公式給我們留下了定義B值(即,類(lèi)別數量)的問(wèn)題。為了找到盡可能中性的指標,我建議根據Freedman-Diaconis rule(這是一個(gè)統計規則,旨在找到使直方圖盡可能接近理論概率分布的B值。)

在Python中使用Freedman-Diaconis rule非常簡(jiǎn)單,因為它已經(jīng)在numpy的直方圖函數中被實(shí)現(足以將字符串“ fd”傳遞給參數“ bins”)。

以下是預期校準錯誤(ECE)的Python實(shí)現,默認情況下采用Freedman-Diaconis rule:

13.png

現在,我們有了一個(gè)校準方法,讓我們比較上面獲得的三個(gè)預測概率的模型(在測試集上)的校準情況:

14.png

三個(gè)模型的ECE比較。 [圖源自作者]

正如上圖所示,如果你認為普通隨機森林的ECE為7%,那么保序回歸在校準方面則提供了最好的結果,這可以看作是一個(gè)巨大的進(jìn)步,因為平均來(lái)看,使用保序回歸的模型,其預測概率距離真實(shí)概率只有1.2%。

引用

如果你想了解更多概率校準的主題,以下是一些有趣的文章(本文的基石):

  • ?Predicting good probabilities with supervised learning? (2005) by Caruana and Niculescu-Mizil.

  • ?On Calibration of Modern Neural Networks? (2017) by Guo et al.

  • ?Obtaining Well Calibrated Probabilities Using Bayesian Binning? (2015) by Naeini et al.

原文標題:

Python’s ?predict_proba? Doesn’t Actually Predict Probabilities (and How to Fix It)

原文鏈接:

https://towardsdatascience.com/pythons-predict-proba-doesn-t-actually-predict-probabilities-and-how-to-fix-it-f582c21d63fc

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。

加速度計相關(guān)文章:加速度計原理


關(guān)鍵詞: Python

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>