<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 如何以及何時使用帶有 scikit-learn 的校準分類模型 > 原文: [https://machinelearningmastery.com/calibrated-classification-model-in-scikit-learn/](https://machinelearningmastery.com/calibrated-classification-model-in-scikit-learn/) 不是直接為分類問題預測類值,而是可以方便地預測觀察屬于每個可能類別的概率。 預測概率允許一些靈活性,包括決定如何解釋概率,呈現具有不確定性的預測,以及提供更細致的方式來評估模型的技能。 與每個類的概率的預期分布匹配的預測概率被稱為校準的。問題是,并非所有機器學習模型都能夠預測校準概率。 有一些方法既可以診斷校準的預測概率,又可以用觀察到的每個類別的分布來更好地校準預測的概率。通常,這可以導致更好的質量預測,具體取決于如何評估模型的技能。 在本教程中,您將發現校準預測概率的重要性,以及如何診斷和改進用于概率分類的模型的校準。 完成本教程后,您將了解: * 非線性機器學習算法通常預測未校準的類概率。 * 可靠性圖可用于診斷模型的校準,并且可以使用方法來更好地校準問題的預測。 * 如何使用 scikit-learn 在 Python 中開發可靠性圖并校準分類模型。 讓我們開始吧。 ![How and When to Use a Calibrated Classification Model with scikit-learn](https://img.kancloud.cn/19/23/192327118f1b3086d71184a6272e742c_640x429.jpg) 如何以及何時使用帶有 scikit-learn 照片的校準分類模型 [Nigel Howe](https://www.flickr.com/photos/legin101/6237221367/) ,保留一些權利。 ## 教程概述 本教程分為四個部分;他們是: 1. 預測概率 2. 預測校準 3. 如何在 Python 中校準概率 4. 工作的校準 SVM 概率的示例 ## 預測概率 分類預測建模問題需要預測或預測給定觀察的標簽。 作為直接預測標簽的替代方案,模型可以預測觀察屬于每個可能的類別標簽的概率。 這為解釋和呈現預測的方式(閾值和預測不確定性的選擇)以及評估模型的方式提供了一些靈活性。 盡管模型可能能夠預測概率,但概率的分布和行為可能與訓練數據中觀察到的概率的預期分布不匹配。 這對于復雜的非線性機器學習算法尤其常見,這些算法不直接進行概率預測,而是使用近似。 可以調整概率的分布以更好地匹配在數據中觀察到的預期分布。該調整被稱為校準,如在模型的校準或類概率的分布的校準中。 > [...]我們希望估計的類概率反映樣本的真實潛在概率。也就是說,需要對預測的類概率(或類似概率值)進行良好校準。為了進行良好校準,概率必須有效地反映感興趣事件的真實可能性。 - 第 249 頁, [Applied Predictive Modeling](https://amzn.to/2kXE35G) ,2013。 ## 預測校準 校準概率有兩個問題;他們正在診斷預測概率的校準和校準過程本身。 ### 可靠性圖(校準曲線) 可靠性圖是觀察到的相對頻率(y 軸)與預測概率頻率(x 軸)的線圖。 > 可靠性圖是用于說明概率預測系統屬性的常用輔助工具。它們包括觀察到的相對頻率與預測概率的關系圖,在調整概率預報系統時提供快速的可視比對,以及記錄最終產品的表現 - [提高可靠性圖的可靠性](https://journals.ametsoc.org/doi/abs/10.1175/WAF993.1),2007。 具體地,預測概率沿 x 軸被劃分為固定數量的桶。然后對每個箱計數事件數(等級= 1)(例如相對觀察頻率)。最后,計數被標準化。然后將結果繪制成線圖。 這些圖在預測文獻中通常被稱為“_ 可靠性 _”圖,盡管也可稱為“_ 校準 _”圖或曲線,因為它們總結了預測概率的校準程度。 校準越好校準或越可靠,點將從圖的左下角到右上角沿著主對角線出現越近。 點或曲線相對于對角線的位置有助于解釋概率;例如: * **在對角線**下方:模型過度預測;概率太大了。 * **在對角線**上方:該模型預測不足;概率太小。 根據定義,概率是連續的,因此我們期望與線分離,通常顯示為 S 形曲線,顯示過度預測低概率和低預測高概率的悲觀傾向。 > 可靠性圖提供診斷以檢查預測值 Xi 是否可靠。粗略地說,如果事件實際發生時觀察到的相對頻率與預測值一致,則概率預測是可靠的。 — [Increasing the Reliability of Reliability Diagrams](https://journals.ametsoc.org/doi/abs/10.1175/WAF993.1), 2007. 可靠性圖有助于理解來自不同預測模型的預測的相對校準。 ### 概率校準 可以校準預測模型所做的預測。 校準的預測可能(或可能不)導致可靠性圖上的校準改進。 一些算法以這樣的方式擬合,即它們的預測概率已經被校準。沒有詳細說明為什么,邏輯回歸就是這樣一個例子。 其他算法不直接產生概率的預測,而是必須近似概率預測。一些示例包括神經網絡,支持向量機和決策樹。 來自這些方法的預測概率可能未經校準,并且可能通過校準進行修改而受益。 預測概率的校準是在通過預測模型進行預測之后應用的重新縮放操作。 校準概率有兩種流行的方法;它們是 Platt Scaling 和 Isotonic Regression。 Platt Scaling 更簡單,適用于 S 形可靠性圖表。等壓回歸更復雜,需要更多數據(否則可能過度擬合),但可以支持不同形狀的可靠性圖(非參數)。 > 當預測概率的失真為 S 形時,Platt Scaling 最有效。等滲回歸是一種更強大的校準方法,可以糾正任何單調失真。不幸的是,這種額外的功率是有代價的。學習曲線分析表明,當數據稀缺時,等滲回歸更容易過度擬合,因此表現比 Platt Scaling 更差。 - [通過監督學習](https://www.cs.cornell.edu/~alexn/papers/calibration.icml05.crc.rev3.pdf)預測良好概率,2005 年。 **注意,這非常重要**:更好的校準概率可能會也可能不會導致更好的基于類別或基于概率的預測。它實際上取決于用于評估預測的特定指標。 實際上,一些實證結果表明,可以從校準預測概率中獲益的算法包括 SVM,袋裝決策樹和隨機森林。 > [...]校準后,最好的方法是增強樹,隨機森林和 SVM。 — [Predicting Good Probabilities With Supervised Learning](https://www.cs.cornell.edu/~alexn/papers/calibration.icml05.crc.rev3.pdf), 2005. ## 如何在 Python 中校準概率 scikit-learn 機器學習庫允許您診斷分類器的概率校準并校準可預測概率的分類器。 ### 診斷校準 您可以通過創建實際概率與測試集上預測概率的可靠性圖來診斷分類器的校準。 在 scikit-learn 中,這稱為校準曲線。 這可以通過首先計算 [calibration_curve()函數](http://scikit-learn.org/stable/modules/generated/sklearn.calibration.calibration_curve.html)來實現。此函數采用數據集的真實類值和主類的預測概率(class = 1)。該函數返回每個 bin 的真實概率和每個 bin 的預測概率。可以通過 _n_bins_ 參數指定箱數,默認為 5。 例如,下面是顯示 API 使用情況的代碼段: ``` ... # predict probabilities probs = model.predic_proba(testX)[:,1] # reliability diagram fop, mpv = calibration_curve(testy, probs, n_bins=10) # plot perfectly calibrated pyplot.plot([0, 1], [0, 1], linestyle='--') # plot model reliability pyplot.plot(mpv, fop, marker='.') pyplot.show() ``` ### 校準分類器 可以使用 [CalibratedClassifierCV](http://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html) 類在 scikit-learn 中校準分類器。 有兩種方法可以使用此類:prefit 和交叉驗證。 您可以在訓練數據集上擬合模型,并使用保持驗證數據集校準此預裝模型。 For example, below is a code snippet showing the API usage: ``` ... # prepare data trainX, trainy = ... valX, valy = ... testX, testy = ... # fit base model on training dataset model = ... model.fit(trainX, trainy) # calibrate model on validation data calibrator = CalibratedClassifierCV(model, cv='prefit') calibrator.fit(valX, valy) # evaluate the model yhat = calibrator.predict(testX) ``` 或者,CalibratedClassifierCV 可以使用 k 折交叉驗證擬合模型的多個副本,并使用保持集校準這些模型預測的概率。使用每個訓練模型進行預測。 For example, below is a code snippet showing the API usage: ``` ... # prepare data trainX, trainy = ... testX, testy = ... # define base model model = ... # fit and calibrate model on training data calibrator = CalibratedClassifierCV(model, cv=3) calibrator.fit(trainX, trainy) # evaluate the model yhat = calibrator.predict(testX) ``` CalibratedClassifierCV 類支持兩種類型的概率校準;具體而言,參數' _sigmoid_ '方法(Platt 方法)和非參數'_ 等滲 _'方法可以通過'_ 方法 _'參數指定。 ## 工作的校準 SVM 概率的示例 我們可以通過一些實例來討論校準混凝土。 在這些示例中,我們將支持向量機(SVM)擬合到噪聲二元分類問題并使用該模型來預測概率,然后使用可靠性圖檢查校準并校準分類器并查看結果。 SVM 是一個很好的候選校準模型,因為它本身不能預測概率,這意味著概率通常是未經校準的。 **關于 SVM** 的注釋:可以通過在擬合模型上調用 _decision_function()_ 函數而不是通常的 _predict_proba()_ 函數來預測概率。概率不是標準化的,但可以通過將' _normalize_ '參數設置為' _True_ '來調用 _calibration_curve()_ 函數時進行歸一化。 以下示例擬合測試問題的 SVM 模型,預測概率,并將概率的校準繪制為可靠性圖, ``` # SVM reliability diagram from sklearn.datasets import make_classification from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.calibration import calibration_curve from matplotlib import pyplot # generate 2 class dataset X, y = make_classification(n_samples=1000, n_classes=2, weights=[1,1], random_state=1) # split into train/test sets trainX, testX, trainy, testy = train_test_split(X, y, test_size=0.5, random_state=2) # fit a model model = SVC() model.fit(trainX, trainy) # predict probabilities probs = model.decision_function(testX) # reliability diagram fop, mpv = calibration_curve(testy, probs, n_bins=10, normalize=True) # plot perfectly calibrated pyplot.plot([0, 1], [0, 1], linestyle='--') # plot model reliability pyplot.plot(mpv, fop, marker='.') pyplot.show() ``` 運行該示例創建了一個可靠性圖表,顯示了 SVM 預測概率的校準(實線)與沿著圖的對角線的完美校準模型(虛線)的比較。 我們可以看到保守預測的預期 S 形曲線。 ![Uncalibrated SVM Reliability Diagram](https://img.kancloud.cn/3b/d0/3bd031999875ab55f7361da5934a4436_1280x960.jpg) 未校準的 SVM 可靠性圖 我們可以使用 5 次交叉驗證更新示例以通過 CalibratedClassifierCV 類適合 SVM,使用保持集來校準預測概率。 下面列出了完整的示例。 ``` # SVM reliability diagram with calibration from sklearn.datasets import make_classification from sklearn.svm import SVC from sklearn.calibration import CalibratedClassifierCV from sklearn.model_selection import train_test_split from sklearn.calibration import calibration_curve from matplotlib import pyplot # generate 2 class dataset X, y = make_classification(n_samples=1000, n_classes=2, weights=[1,1], random_state=1) # split into train/test sets trainX, testX, trainy, testy = train_test_split(X, y, test_size=0.5, random_state=2) # fit a model model = SVC() calibrated = CalibratedClassifierCV(model, method='sigmoid', cv=5) calibrated.fit(trainX, trainy) # predict probabilities probs = calibrated.predict_proba(testX)[:, 1] # reliability diagram fop, mpv = calibration_curve(testy, probs, n_bins=10, normalize=True) # plot perfectly calibrated pyplot.plot([0, 1], [0, 1], linestyle='--') # plot calibrated reliability pyplot.plot(mpv, fop, marker='.') pyplot.show() ``` 運行該示例為校準概率創建可靠性圖。 校準概率的形狀是不同的,更好地擁抱對角線,盡管在上象限仍然低于預測。 從視覺上看,該圖表顯示了更好的校準模型。 ![Calibrated SVM Reliability Diagram](https://img.kancloud.cn/9d/f0/9df02530964edf189cc243a46cd461cb_1280x960.jpg) 校準的 SVM 可靠性圖 通過在同一圖上包含兩個可靠性圖,我們可以使兩個模型之間的對比更加明顯。 The complete example is listed below. ``` # SVM reliability diagrams with uncalibrated and calibrated probabilities from sklearn.datasets import make_classification from sklearn.svm import SVC from sklearn.calibration import CalibratedClassifierCV from sklearn.model_selection import train_test_split from sklearn.calibration import calibration_curve from matplotlib import pyplot # predict uncalibrated probabilities def uncalibrated(trainX, testX, trainy): # fit a model model = SVC() model.fit(trainX, trainy) # predict probabilities return model.decision_function(testX) # predict calibrated probabilities def calibrated(trainX, testX, trainy): # define model model = SVC() # define and fit calibration model calibrated = CalibratedClassifierCV(model, method='sigmoid', cv=5) calibrated.fit(trainX, trainy) # predict probabilities return calibrated.predict_proba(testX)[:, 1] # generate 2 class dataset X, y = make_classification(n_samples=1000, n_classes=2, weights=[1,1], random_state=1) # split into train/test sets trainX, testX, trainy, testy = train_test_split(X, y, test_size=0.5, random_state=2) # uncalibrated predictions yhat_uncalibrated = uncalibrated(trainX, testX, trainy) # calibrated predictions yhat_calibrated = calibrated(trainX, testX, trainy) # reliability diagrams fop_uncalibrated, mpv_uncalibrated = calibration_curve(testy, yhat_uncalibrated, n_bins=10, normalize=True) fop_calibrated, mpv_calibrated = calibration_curve(testy, yhat_calibrated, n_bins=10) # plot perfectly calibrated pyplot.plot([0, 1], [0, 1], linestyle='--', color='black') # plot model reliabilities pyplot.plot(mpv_uncalibrated, fop_uncalibrated, marker='.') pyplot.plot(mpv_calibrated, fop_calibrated, marker='.') pyplot.show() ``` 運行該示例將創建一個單一的可靠性圖表,顯示校準(橙色)和未校準(藍色)概率。 由于校準模型所做的預測實際上是五個子模型的組合,因此并不是真正的蘋果對蘋果比較。 盡管如此,我們確實看到校準概率的可靠性存在顯著差異(很可能是由校準過程引起的)。 ![Calibrated and Uncalibrated SVM Reliability Diagram](https://img.kancloud.cn/df/1f/df1fdd72a86cb783d6a356c24645db45_1280x960.jpg) 校準和未校準的 SVM 可靠性圖 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 書籍和論文 * [Applied Predictive Modeling](https://amzn.to/2kXE35G) ,2013。 * [通過監督學習](https://www.cs.cornell.edu/~alexn/papers/calibration.icml05.crc.rev3.pdf)預測良好概率,2005 年。 * [從決策樹和樸素貝葉斯分類器](http://cseweb.ucsd.edu/~elkan/calibrated.pdf)獲得校準概率估計[2001]。 * [提高可靠性圖的可靠性](https://journals.ametsoc.org/doi/abs/10.1175/WAF993.1),2007。 ### API * [sklearn.calibration.CalibratedClassifierCV API](http://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html) * [sklearn.calibration.calibration_curve API](http://scikit-learn.org/stable/modules/generated/sklearn.calibration.calibration_curve.html#sklearn.calibration.calibration_curve) * [概率校準,scikit-learn 用戶指南](http://scikit-learn.org/stable/modules/calibration.html) * [概率校準曲線,scikit-learn](http://scikit-learn.org/stable/auto_examples/calibration/plot_calibration_curve.html) * [分類器校準比較,scikit-learn](http://scikit-learn.org/stable/auto_examples/calibration/plot_compare_calibration.html) ### 用品 * [CAWCAR 驗證網站](http://www.cawcr.gov.au/projects/verification/) * 維基百科上的[校準(統計)](https://en.wikipedia.org/wiki/Calibration_(statistics)) * [維基百科上的概率分類](https://en.wikipedia.org/wiki/Probabilistic_classification) * [Scikit 在 CrossValidated](https://stats.stackexchange.com/questions/263393/scikit-correct-way-to-calibrate-classifiers-with-calibratedclassifiercv) 上使用 CalibratedClassifierCV 校準分類器的正確方法 ## 摘要 在本教程中,您發現了校準預測概率以及如何診斷和改進用于概率分類的模型校準的重要性。 具體來說,你學到了: * 非線性機器學習算法通常預測未校準的類概率。 * 可靠性圖可用于診斷模型的校準,并且可以使用方法來更好地校準問題的預測。 * 如何使用 scikit-learn 在 Python 中開發可靠性圖并校準分類模型。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看