色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          "); //-->

          博客專欄

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

          獨(dú)家 | Python的“predict_prob”方法不能真實(shí)反映預(yù)測概率校準(zhǔn)(如何實(shí)現(xiàn)校準(zhǔn))

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

          作者:  Samuele Mazzanti

          翻譯:歐陽錦    

          校對:王可汗

          1.png

          圖源自作者

          數(shù)據(jù)科學(xué)家通常根據(jù)準(zhǔn)確性或準(zhǔn)確性來評估其預(yù)測模型,但幾乎不會問自己:

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

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

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

          2.png

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

          現(xiàn)在,你會向該用戶推薦哪個(gè)杯子?

          以上兩種模型都認(rèn)為用戶更有可能購買普通馬克杯(因此,模型A和模型B在ROC曲線下具有相同的面積,因?yàn)檫@個(gè)指標(biāo)僅僅對分類進(jìn)行評估)。

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

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

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

          “predict_proba”的問題

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

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

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

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

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

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

          當(dāng)預(yù)測的概率反映了真實(shí)情況的潛在概率時(shí),這些預(yù)測概率被稱為“已校準(zhǔn)”。

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

          校準(zhǔn)曲線

          評估一個(gè)模型校準(zhǔn)的最簡單的方法是通過一個(gè)稱為“校準(zhǔn)曲線”的圖(也稱為“可靠性圖”,reliability diagram)。

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

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

          3.png

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

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

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

          4.png

           分類策略,分類數(shù)量為7。[圖源自作者]

          出于繪圖目的,本人更喜歡“quantile”的分類策略。實(shí)際上,“uniform”分類可能會引起誤導(dǎo),因?yàn)橛行╊愔锌赡苤话苌俚挠^察結(jié)果。

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

          5.png

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

          讓我們看一些校準(zhǔn)曲線的常見類型的例子,它們表明了模型的校準(zhǔn)錯(cuò)誤:

          6.png

          錯(cuò)誤校準(zhǔn)的常見示例。 [圖源自作者]

          最常見的錯(cuò)誤校準(zhǔn)類型為:

          • 系統(tǒng)高估。與真實(shí)分布相比,預(yù)測概率的分布整體偏右。當(dāng)您在正數(shù)極少的不平衡數(shù)據(jù)集上訓(xùn)練模型時(shí),這種錯(cuò)誤校準(zhǔn)很常見。(如紅線)

          • 系統(tǒng)低估。與真實(shí)分布相比,預(yù)測概率的分布整體偏左。(如藍(lán)線)

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

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

          如何解決校準(zhǔn)錯(cuò)誤(Python)

          假設(shè)你已經(jīng)訓(xùn)練了一個(gè)分類器,該分類器會產(chǎn)生準(zhǔn)確但未經(jīng)校準(zhǔn)的概率。概率校準(zhǔn)的思想是建立第二個(gè)模型(稱為校準(zhǔn)器),校準(zhǔn)器模型能夠?qū)⒛阌?xùn)練的分類器“校準(zhǔn)”為實(shí)際概率。

          請注意,用于訓(xùn)練的第一個(gè)分類器的數(shù)據(jù)不能被用于校準(zhǔn)。

          7.png

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

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

          兩種常被用作校準(zhǔn)器的方法:

          • 保序回歸。一種非參數(shù)算法,這種非參數(shù)算法將非遞減的自由格式行擬合到數(shù)據(jù)中。行不會減少這一事實(shí)是很重要的,因?yàn)樗駨脑寂判颉?/p>

          • 邏輯回歸。

          看看使用Python如何在玩具數(shù)據(jù)集中實(shí)際應(yīng)用校準(zhǔn)器:

          8.png

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

          9.png

          然后,使用分類器的輸出(在驗(yàn)證數(shù)據(jù)集上)來擬合校準(zhǔn)器,并最終預(yù)測測試數(shù)據(jù)集的概率。

          保序回歸

          10.png

          邏輯回歸

          現(xiàn)在有三種選擇來預(yù)測概率:

          1. 普通隨機(jī)森林,

          2. 隨機(jī)森林 + 保序回歸,

          3. 隨機(jī)森林 + 邏輯回歸。

          但是,我們?nèi)绾卧u估最校準(zhǔn)的是哪一個(gè)呢?

          量化校準(zhǔn)錯(cuò)誤

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

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

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

          11.png

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

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

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

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

          12.png

          預(yù)期校準(zhǔn)誤差(ECE)[圖源自作者]

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

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

          在Python中使用Freedman-Diaconis rule非常簡單,因?yàn)樗呀?jīng)在numpy的直方圖函數(shù)中被實(shí)現(xiàn)(足以將字符串“ fd”傳遞給參數(shù)“ bins”)。

          以下是預(yù)期校準(zhǔn)錯(cuò)誤(ECE)的Python實(shí)現(xiàn),默認(rèn)情況下采用Freedman-Diaconis rule:

          13.png

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

          14.png

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

          正如上圖所示,如果你認(rèn)為普通隨機(jī)森林的ECE為7%,那么保序回歸在校準(zhǔn)方面則提供了最好的結(jié)果,這可以看作是一個(gè)巨大的進(jìn)步,因?yàn)槠骄鶃砜?,使用保序回歸的模型,其預(yù)測概率距離真實(shí)概率只有1.2%。

          引用

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

          • ?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.

          原文標(biāo)題:

          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

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

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


          關(guān)鍵詞: Python

          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉