资讯动态

scikit-learn 概率校准完全指南:用 CalibratedClassifierCV 让分类器输出可信概率

发布时间:2026/10/13 16:26:10 来源:尧图企业网站定制
文档机器学习教程【免费下载链接】sklearn-doc-zh:book: [译] scikit-learnsklearn 中文文档项目地址https://gitcode.com/gh_mirrors/sk/sklearn-doc-zh点击查看免费下载本文基于 sklearn 0.21.3 中文文档1.16. 概率校准章节docs/master/17.md整理。实际应用中许多分类器返回的predict_proba概率并不能直接当作置信度使用有的过于自信把概率推到 0 或 1有的过于保守集中在 0.5 附近。通过sklearn.calibration模块的两种校准方法Platt Sigmoid 参数化校准与保序回归非参数校准你可以将任意分类器的概率输出校准为可解释的置信度级别并用 Brier 分数、校准曲线可靠性图客观度量校准质量。读完本文你将掌握概率校准的原理、CalibratedClassifierCV的交叉验证用法含cvprefit模式、多分类校准机制以及不同场景下校准方法的选择策略。什么是概率校准把概率输出变成可信的置信度执行分类任务时我们通常不仅希望预测出类标签还希望获得该标签的概率——这个概率代表对预测的信心。然而不同模型给出的概率质量参差不齐一些模型给出贫乏的概率估计有些模型甚至不支持概率预测如部分线性分类器没有predict_proba。校准模块sklearn.calibration正是为了解决这两个问题校准已有模型的概率或为原本不输出概率的模型补充概率预测能力。一个精确校准的分类器well-calibrated classifier是概率分类器其predict_proba的输出可以被直接解释为置信度级别confidence level。例如一个经过良好校准的二元分类器当它对一批样本给出接近 0.8 的predict_proba值时这批样本中应当有大约 80% 确实属于正类。换句话说预测概率与真实频率应当一致。下图对比了不同分类器概率预测的校准程度分类器校准的比较示例对应官方示例plot_compare_calibration为什么不同分类器的概率偏差模式各不相同LogisticRegression默认情况下就能返回良好校准的预测因为它直接优化 log-loss对数损失。相反其他方法返回的是 biased probabilities偏倚概率且每种方法的偏差方向不同这与模型本身的归纳偏置密切相关模型概率偏差特征根本原因GaussianNB往往将概率推到 0 或 1过于自信假设特征在给定类别条件下相互独立当数据集中存在冗余特征违反独立性假设时概率估计被极端化RandomForestClassifier相反行为概率峰值集中在约 0.2 与 0.9接近 0 或 1 的概率非常罕见过于保守Niculescu-Mizil 和 Caruana 的解释bagging / random forests 对基础模型预测做平均由于预测被限制在 [0,1] 区间基础模型方差引入的误差会从 0 和 1 两端向内推开预测值——若模型应对某样本预测 p0bagging 只有在所有树都预测 0 时才能实现而噪声会使部分树预测大于 0从而把平均预测从 0 移开LinearSVC呈现比随机森林更明显的 Sigmoid 形状校准曲线经典最大边距方法hinge loss 属性注意力集中在靠近决策边界的 hard samples支持向量上概率输出天然不置信校准曲线calibration curve又称可靠性图reliability diagramWilks 1995是观察上述偏差的直观工具将预测概率分箱后绘制预测概率与真实正类频率的关系曲线完美校准的分类器其曲线应贴近对角线。两种概率校准方法Platt Sigmoid 与保序回归scikit-learn 提供了两种校准方法1. Platt 的 Sigmoid 模型参数化方法基于 Platt1999提出的方法用带两个参数的 Sigmoid 函数对模型得分进行映射$$\hat{p}(x) \frac{1}{1 \exp(A \cdot f(x) B)}$$其中 $f(x)$ 是待校准模型的输出得分参数 $A$、$B$ 通过在验证集上最大化似然或最小化对数损失拟合得到。适用场景校准曲线为典型 Sigmoid 形状即模型偏差表现为不够自信或过于自信的单调压缩/拉伸且可用于校准的数据有限时Sigmoid 校准是首选。2. 保序回归Isotonic Regression非参数方法非参数方法不对映射函数施加具体形状假设而是用保序回归学习一条单调非降的分段线性映射。从 scikit-learn 的IsotonicRegression定义见等渗回归章节看它求解如下优化问题最小化 $\sum_i w_i (y_i - \hat{y}_i)^2$服从约束 $\hat{y}_{min} \hat{y}_1 \le \hat{y}_2 \le \dots \le \hat{y}n \hat{y}{max}$其中每个 $w_i$ 为严格正权重$\hat{y}$ 是逼近 $y$ 的非降分段线性函数。适用场景校准曲线不是 Sigmoid 形状如转置 Sigmoid 结构且有大量数据可用于校准时等渗校准是更优选择因为它不做强形状假设能拟合任意单调形状。如何选择经验法则总结如下Sigmoid 校准methodsigmoid校准曲线呈 Sigmoid 形状、校准数据有限时优先等渗校准methodisotonic校准曲线非 Sigmoid 形状、可用于校准的数据量充足时优先。注意等渗校准是分段线性的自由度更高若校准数据不足容易过拟合而 Sigmoid 校准仅两个参数方差更小但其参数形式假定映射为 Sigmoid 曲线无法表达转置 Sigmoid 等复杂形状。使用 CalibratedClassifierCV 进行概率校准CalibratedClassifierCV是校准的核心实现类其关键设计是防止数据泄漏用于校准的数据必须与用于模型拟合的数据不相交否则校准会失效。交叉验证校准默认模式CalibratedClassifierCV默认使用交叉验证生成器对每一个交叉验证拆分fold在训练样本上拟合基础模型参数在测试样本上估计校准器参数训练结束后在全部数据上重新拟合一个最终的基础估计器配合校准器使用预测时对每个折叠中校准后的预测概率取平均得到最终概率。这种设计同时保证了基础模型拟合数据与校准器拟合数据严格分离且所有数据都被用于模型训练与校准充分利用样本。from sklearn.calibration import CalibratedClassifierCV from sklearn.svm import LinearSVC # 基础估计器LinearSVC 本身不输出概率 base_estimator LinearSVC() # 默认使用 3 折交叉验证cv3进行校准 calibrated_clf CalibratedClassifierCV( base_estimator, methodsigmoid, # 或 isotonic cv3 ) calibrated_clf.fit(X_train, y_train) probabilities calibrated_clf.predict_proba(X_test)使用已拟合分类器校准cvprefit如果你已经有一个拟合好的分类器可以通过cvprefit参数直接对它进行校准# 先拟合基础模型 clf LinearSVC() clf.fit(X_train, y_train) # 用独立数据校准 calibrated_clf CalibratedClassifierCV(clf, methodisotonic, cvprefit) calibrated_clf.fit(X_calib, y_calib) # X_calib 必须与训练数据不相交使用cvprefit时用户必须手动确保模型拟合数据与校准数据不相交——这是官方文档明确强调的前提条件。一旦设置prefit校准器将直接基于传入的已拟合模型与校准数据构建不再进行交叉验证。多分类问题的概率校准CalibratedClassifierCV同样支持两个以上类别的分类任务前提是基础估计器支持多分类分类器以**一对一one-vs-one**方式分别对每个类别进行校准预测未知数据的概率时分别预测每个类别的校准后概率由于各概率之和不一定为 1最后执行后处理归一化normalization使其满足概率分布要求。多分类场景的典型效果未校准的强分类器如随机森林对 800 个训练点全部拟合时预测过于自信导致大量对数损失在 600 个点上训练、剩余 200 个点上用methodsigmoid校准后预测概率向量从单纯形simplex边缘向中心收缩置信度得到合理抑制最终显著降低 log-loss。多分类校准的 2-simplex 示意图如下颜色代表真实类别红 class 1、绿 class 2、蓝 class 3箭头表示校准前后概率向量的移动方向值得注意的是降低对数损失的另一种等价方案是增加基础估计器的数量如增加随机森林的树数效果与校准类似——这为模型调优提供了替代思路。如何评估校准质量校准曲线与 Brier 分数校准曲线Calibration Curve将预测概率分箱后绘制预测概率 vs 真实正类频率曲线。完美校准的分类器曲线接近对角线。从实际实验含 20 个特征、100,000 个样本、其中 2 个信息量特征与 10 个冗余特征的二元分类人造数据集中可以观察到逻辑回归的校准曲线几乎是对角线——天然良好校准线性 SVC呈现典型 Sigmoid 曲线——不够自信的分类器由 hinge loss 的边缘属性引起其模型集中在决策边界附近的 hard samples 上两种校准sigmoid / isotonic均可解决效果几乎相同高斯朴素贝叶斯校准曲线呈转置 Sigmoid 结构——过于自信的分类器的典型特征由违反朴素贝叶斯特征独立性假设的冗余特征引起等渗回归校准可将其拉回接近对角线的形状sigmoid 校准也能改善 Brier 分数但效果弱于非参数等渗校准。以下是高斯朴素贝叶斯等模型的校准曲线对比对应plot_calibration_curve示例Brier 分数Brier Score LossBrier 分数是衡量概率预测校准度的定量指标公式如下见模型评估章节$$BS \frac{1}{N} \sum_{t1}^{N}(f_t - o_t)^2$$其中 $N$ 为预测总数$f_t$ 为实际结果 $o_t$ 的预测概率。Brier 分数损失取值在 0 到 1 之间分数越低均方差越小预测越准确可以被认为是对一组概率预测校准程度的度量。sklearn.metrics.brier_score_loss函数用于计算二进制类的 Brier 分数用法示例import numpy as np from sklearn.metrics import brier_score_loss y_true np.array([0, 1, 1, 0]) y_true_categorical np.array([spam, ham, ham, spam]) y_prob np.array([0.1, 0.9, 0.8, 0.4]) y_pred np.array([0, 1, 1, 0]) brier_score_loss(y_true, y_prob) # 0.055 # 指定 pos_label 后使用 1-y_prob 等价 brier_score_loss(y_true, 1 - y_prob, pos_label0) # 0.055 # 支持类别型标签与 pos_label brier_score_loss(y_true_categorical, y_prob, pos_labelham) # 0.055 # 注意把阈值化后的 y_pred 当作概率传入会得到 0因为 0/1 与真实标签完全一致 brier_score_loss(y_true, y_prob 0.5) # 0.0推荐的评估工作流用calibration_curve绘制可靠性图肉眼观察曲线是否贴近对角线区分 Sigmoid 型与转置 Sigmoid 型偏差用brier_score_loss计算定量分数比较校准前后的改进幅度多分类场景可结合 log-loss对数损失评估整体概率质量。相关仓库资源导航概率校准章节原文docs/master/17.md即本文整理来源等渗回归IsotonicRegression数学原理docs/master/16.mdBrier 分数损失详细介绍与更多示例docs/master/32.md校准相关示例索引分类器校准的比较、概率校准曲线、分类器的概率校准、3 类分类的概率校准docs/examples/README.md参考资料本文整理自 scikit-learn 官方文档1.16. Probability calibration章节其引用的学术文献包括Obtaining calibrated probability estimates from decision trees and naive Bayesian classifiers, B. Zadrozny C. Elkan, ICML 2001Transforming Classifier Scores into Accurate Multiclass Probability Estimates, B. Zadrozny C. Elkan, KDD 2002Probabilistic Outputs for Support Vector Machines and Comparisons to Regularized Likelihood Methods, J. Platt, 1999Predicting Good Probabilities with Supervised Learning, A. Niculescu-Mizil R. Caruana, ICML 2005On the combination of forecast probabilities for consecutive precipitation periods, Wea. Forecasting, 5, 640–650, Wilks, D. S., 1990a赞分享文档机器学习教程【免费下载链接】sklearn-doc-zh:book: [译] scikit-learnsklearn 中文文档项目地址https://gitcode.com/gh_mirrors/sk/sklearn-doc-zh点击查看免费下载相关推荐scikit-learn概率校准技术提升分类模型预测准确率的完整指南scikit learn概率校准技术提升分类模型预测准确率的完整指南 在机器学习分类任务中我们不仅希望模型能够正确预测类别标签更希望获得准确的概率估计来评文档机器学习教程如何获取LIBSVM分类置信度3个步骤轻松实现概率输出如何获取LIBSVM分类置信度3个步骤轻松实现概率输出 LIBSVM是一款强大的支持向量机库广泛应用于分类和回归任务。许多用户在使用LIBSVM进行分类时机器学习Ludwig 概率校准指南基于温度缩放Temperature Scaling的模型输出校准Ludwig 概率校准指南基于温度缩放Temperature Scaling的模型输出校准 概率校准Probability Calibration是让人工智能深度学习机器学习大模型预训练微调LoRA多模态NLP计算机视觉模型推理服务上一篇从零开始构建你的B站视频离线库BilibiliDown实战指南下一篇5分钟搞定memtest_vulkan显卡内存稳定性终极检测方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑