# 1.16. 概率校準
校驗者:
[@曲曉峰](https://github.com/apachecn/scikit-learn-doc-zh)
[@小瑤](https://github.com/apachecn/scikit-learn-doc-zh)
翻譯者:
[@那伊抹微笑](https://github.com/apachecn/scikit-learn-doc-zh)
執行分類時, 您經常希望不僅可以預測類標簽, 還要獲得相應標簽的概率. 這個概率給你一些預測的信心. 一些模型可以給你貧乏的概率估計, 有些甚至不支持概率預測. 校準模塊可以讓您更好地校準給定模型的概率, 或添加對概率預測的支持.
精確校準的分類器是概率分類器, 其可以將 predict\_proba 方法的輸出直接解釋為 confidence level(置信度級別). 例如,一個經過良好校準的(二元的)分類器應該對樣本進行分類, 使得在給出一個接近 0.8 的 prediction\_proba 值的樣本中, 大約 80% 實際上屬于正類. 以下圖表比較了校準不同分類器的概率預測的良好程度:
[](../auto_examples/calibration/plot_compare_calibration.html)
[`LogisticRegression`](generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression "sklearn.linear_model.LogisticRegression") 默認情況下返回良好的校準預測, 因為它直接優化了 log-loss(對數損失)情況. 相反,其他方法返回 biased probabilities(偏倚概率); 每種方法有不同的偏差:
- [`GaussianNB`](generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB "sklearn.naive_bayes.GaussianNB") 往往將概率推到 0 或 1(注意直方圖中的計數). 這主要是因為它假設特征在給定類別的條件下是獨立的, 在該數據集中不包含 2 個冗余特征.
- [`RandomForestClassifier`](generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier "sklearn.ensemble.RandomForestClassifier") 解釋了相反的行為:直方圖在約 0.2 和 0.9 的概率時顯示峰值, 而接近 0 或 1 的概率非常罕見. Niculescu-Mizil 和 Caruana \[4\] 給出了一個解釋:”諸如 bagging 和 random forests(隨機森林)的方法, 從基本模型的平均預測中可能難以將預測置于 0 和 1 附近, 因為基礎模型的變化會偏離預測值, 它們應該接近于零或偏離這些值, 因為預測被限制在 \[0,1\] 的間隔, 由方差引起的誤差往往是靠近 0 和 1 的一邊, 例如,如果一個模型應該對于一個案例,預測 p = 0,bagging 可以實現的唯一方法是假設所有的 bagging 樹預測為零. 如果我們在 bagging 樹上增加噪聲, 這種噪聲將導致一些樹預測大于 0 的值, 因此將 bagging 的平均預測從 0 移開. 我們用隨機森林最強烈地觀察到這種效應, 因為用隨機森林訓練的 base-level 樹由于特征劃分而具有相對較高的方差. 因此,校準曲線也被稱為可靠性圖 (Wilks 1995 \[5\] \_) 顯示了一種典型的 sigmoid 形狀, 表明分類器可以更多地信任其 “直覺”, 并通常將接近 0 或 1 的概率返回.
- 線性支持向量分類 ([`LinearSVC`](generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC "sklearn.svm.LinearSVC")) 顯示了作為 RandomForestClassifier 更多的 Sigmoid 曲線, 這是經典的最大邊距方法 (compare Niculescu-Mizil and Caruana [\[4\]](#id3)), 其重點是靠近決策邊界的 hard samples(支持向量).
提供了執行概率預測校準的兩種方法: 基于 Platt 的 Sigmoid 模型的參數化方法和基于 isotonic regression(保序回歸)的非參數方法 ([`sklearn.isotonic`](classes.html#module-sklearn.isotonic "sklearn.isotonic")). 對于不用于模型擬合的新數據, 應進行概率校準. 類 [`CalibratedClassifierCV`](generated/sklearn.calibration.CalibratedClassifierCV.html#sklearn.calibration.CalibratedClassifierCV "sklearn.calibration.CalibratedClassifierCV") 使用交叉驗證生成器, 并對每個拆分模型參數對訓練樣本和測試樣本的校準進行估計. 然后對折疊預測的概率進行平均. 已經安裝的分類器可以通過:class:CalibratedClassifierCV 傳遞參數 cv =”prefit” 這種方式進行校準. 在這種情況下, 用戶必須手動注意模型擬合和校準的數據是不相交的.
以下圖像展示了概率校準的好處. 第一個圖像顯示一個具有 2 個類和 3 個數據塊的數據集. 中間的數據塊包含每個類的隨機樣本. 此數據塊中樣本的概率應為 0.5.
[](../auto_examples/calibration/plot_calibration.html)
以下圖像使用沒有校準的高斯樸素貝葉斯分類器, 使用 sigmoid 校準和非參數的等滲校準來顯示上述估計概率的數據. 可以觀察到, 非參數模型為中間樣本提供最準確的概率估計, 即0.5.
[](../auto_examples/calibration/plot_calibration.html)
對具有20個特征的100.000個樣本(其中一個用于模型擬合)進行二元分類的人造數據集進行以下實驗. 在 20個 特征中,只有 2 個是信息量, 10 個是冗余的. 該圖顯示了使用邏輯回歸獲得的估計概率, 線性支持向量分類器(SVC)和具有 sigmoid 校準和 sigmoid 校準的線性 SVC. 校準性能使用 Brier score [`brier_score_loss`](generated/sklearn.metrics.brier_score_loss.html#sklearn.metrics.brier_score_loss "sklearn.metrics.brier_score_loss") 來計算, 請看下面的圖例(越銷越好).
[](../auto_examples/calibration/plot_calibration_curve.html)
這里可以觀察到, 邏輯回歸被很好地校準, 因為其曲線幾乎是對角線. 線性 SVC 的校準曲線或可靠性圖具有 sigmoid 曲線, 這是一個典型的不夠自信的分類器. 在 LinearSVC 的情況下, 這是 hinge loss 的邊緣屬性引起的, 這使得模型集中在靠近決策邊界(支持向量)的 hard samples(硬樣本)上. 這兩種校準都可以解決這個問題, 并產生幾乎相同的結果. 下圖顯示了高斯樸素貝葉斯在相同數據上的校準曲線, 具有兩種校準, 也沒有校準.
[](../auto_examples/calibration/plot_calibration_curve.html)
可以看出, 高斯樸素貝葉斯的表現非常差, 但是以線性 SVC 的方式也是如此. 盡管線性 SVC 顯示了 sigmoid 校準曲線, 但高斯樸素貝葉斯校準曲線具有轉置的 sigmoid 結構. 這對于過分自信的分類器來說是非常經典的. 在這種情況下,分類器的過度自信是由違反樸素貝葉斯特征獨立假設的冗余特征引起的.
用等滲回歸法對高斯樸素貝葉斯概率的校準可以解決這個問題, 從幾乎對角線校準曲線可以看出. Sigmoid 校準也略微改善了 brier 評分, 盡管不如非參數等滲校準那樣強烈. 這是 sigmoid 校準的固有限制,其參數形式假定為 sigmoid ,而不是轉置的 sigmoid 曲線. 然而, 非參數等滲校準模型沒有這樣強大的假設, 并且可以處理任何形狀, 只要有足夠的校準數據. 通常,在校準曲線為 sigmoid 且校準數據有限的情況下, sigmoid 校準是優選的, 而對于非 sigmoid 校準曲線和大量數據可用于校準的情況,等滲校準是優選的.
[`CalibratedClassifierCV`](generated/sklearn.calibration.CalibratedClassifierCV.html#sklearn.calibration.CalibratedClassifierCV "sklearn.calibration.CalibratedClassifierCV") 也可以處理涉及兩個以上類的分類任務, 如果基本估計器可以這樣做的話. 在這種情況下, 分類器是以一對一的方式分別對每個類進行校準. 當預測未知數據的概率時, 分別預測每個類的校準概率. 由于這些概率并不總是一致, 因此執行后處理以使它們歸一化.
下一個圖像說明了 Sigmoid 校準如何改變 3 類分類問題的預測概率. 說明是標準的 2-simplex,其中三個角對應于三個類. 箭頭從未校準分類器預測的概率向量指向在保持驗證集上的 sigmoid 校準之后由同一分類器預測的概率向量. 顏色表示實例的真實類(red: class 1, green: class 2, blue: class 3).
[](../auto_examples/calibration/plot_calibration_multiclass.html)
基礎分類器是具有 25 個基本估計器(樹)的隨機森林分類器. 如果這個分類器對所有 800 個訓練數據點進行了訓練, 那么它的預測過于自信, 從而導致了大量的對數損失. 校準在 600 個數據點上訓練的相同分類器, 其余 200 個數據點上的 method =’sigmoid’ 減少了預測的置信度, 即將概率向量從單面的邊緣向中心移動:
[](../auto_examples/calibration/plot_calibration_multiclass.html)
該校準導致較低的 log-loss(對數損失). 請注意,替代方案是增加基準估計量的數量, 這將導致對數損失類似的減少.
參考:
- Obtaining calibrated probability estimates from decision trees and naive Bayesian classifiers, B. Zadrozny & C. Elkan, ICML 2001
- Transforming Classifier Scores into Accurate Multiclass Probability Estimates, B. Zadrozny & C. Elkan, (KDD 2002)
- Probabilistic Outputs for Support Vector Machines and Comparisons to Regularized Likelihood Methods, J. Platt, (1999)
[\[4\]](#id2)Predicting Good Probabilities with Supervised Learning, A. Niculescu-Mizil & R. Caruana, ICML 2005\[5\]On the combination of forecast probabilities for consecutive precipitation periods. Wea. Forecasting, 5, 640–650., Wilks, D. S., 1990a
- scikit-learn 0.19 中文文檔
- 用戶指南
- 1. 監督學習
- 1.1. 廣義線性模型
- 1.2. 線性和二次判別分析
- 1.3. 內核嶺回歸
- 1.4. 支持向量機
- 1.5. 隨機梯度下降
- 1.6. 最近鄰
- 1.7. 高斯過程
- 1.8. 交叉分解
- 1.9. 樸素貝葉斯
- 1.10. 決策樹
- 1.11. 集成方法
- 1.12. 多類和多標簽算法
- 1.13. 特征選擇
- 1.14. 半監督學習
- 1.15. 等式回歸
- 1.16. 概率校準
- 1.17. 神經網絡模型(有監督)
- 2. 無監督學習
- 2.1. 高斯混合模型
- 2.2. 流形學習
- 2.3. 聚類
- 2.4. 雙聚類
- 2.5. 分解成分中的信號(矩陣分解問題)
- 2.6. 協方差估計
- 2.7. 經驗協方差
- 2.8. 收斂協方差
- 2.9. 稀疏逆協方差
- 2.10. Robust 協方差估計
- 2.11. 新奇和異常值檢測
- 2.12. 密度估計
- 2.13. 神經網絡模型(無監督)
- 3. 模型選擇和評估
- 3.1. 交叉驗證:評估估算器的表現
- 3.2. 調整估計器的超參數
- 3.3. 模型評估: 量化預測的質量
- 3.4. 模型持久化
- 3.5. 驗證曲線: 繪制分數以評估模型
- 4. 數據集轉換
- 4.1. Pipeline(管道)和 FeatureUnion(特征聯合): 合并的評估器
- 4.2. 特征提取
- 4.3. 預處理數據
- 4.4. 無監督降維
- 4.5. 隨機投影
- 4.6. 內核近似
- 4.7. 成對的矩陣, 類別和核函數
- 4.8. 預測目標 (y) 的轉換
- 5. 數據集加載工具
- 6. 大規模計算的策略: 更大量的數據
- 7. 計算性能
- 教程
- 使用 scikit-learn 介紹機器學習
- 關于科學數據處理的統計學習教程
- 機器學習: scikit-learn 中的設置以及預估對象
- 監督學習:從高維觀察預測輸出變量
- 模型選擇:選擇估計量及其參數
- 無監督學習: 尋求數據表示
- 把它們放在一起
- 尋求幫助
- 處理文本數據
- 選擇正確的評估器(estimator)
- 外部資源,視頻和談話