当前位置: 首页 > article >正文

【漫话机器学习系列】019.布里(莱)尔分数(Birer score)

Brier Score(布里尔分数)

Brier Score 是一种用于衡量概率预测准确性的评估指标,特别适用于二分类或多分类问题。它通过计算预测概率与真实标签之间的均方误差来评估模型的预测能力。布里尔分数最初由 Glenn W. Brier 于1950年提出,主要用于天气预报的概率预测分析。


定义

对于一个样本集 \{(y_i, p_i)\}_{i=1}^N

  • y_i 是样本 i 的真实标签,通常为 0 或 1(在二分类问题中)。
  • p_i​ 是模型预测的样本 i 属于正类的概率。

布里尔分数定义为:

\text{Brier Score} = \frac{1}{N} \sum_{i=1}^N (p_i - y_i)^2

性质
  • 取值范围:
    0 \leq \text{Brier Score} \leq 1
    • \text{Brier Score} = 0:模型预测完美。
    • \text{Brier Score} = 1:模型预测完全错误。
  • 本质:布里尔分数是均方误差的一种形式,适合概率预测。

分解

布里尔分数可以通过分解公式细化为以下三个部分:

\text{Brier Score} = \text{Uncertainty} - \text{Resolution} + \text{Reliability}

  1. Uncertainty(不确定性)

    • 数据的内在不确定性,反映真实标签的分布情况。
    • 当正负样本比例接近 50:50 时,不确定性较高。
  2. Resolution(分辨率)

    • 反映预测结果能否清晰地区分正负类。
    • 模型预测越有信心(概率接近 0 或 1),分辨率越高。
  3. Reliability(可靠性)

    • 反映模型预测概率与真实频率的匹配程度。
    • 可靠性越高,模型越能准确地预测概率值。

通过分解,可以更直观地理解模型的预测能力来源。


二分类问题的应用

在二分类问题中,布里尔分数衡量预测概率与实际标签的差异。
例如:

  • 对于一个样本,真实标签 y = 1,预测概率 p = 0.8:

    (p - y)^2 = (0.8 - 1)^2 = 0.04
  • 对于另一个样本,真实标签 y = 0,预测概率 p = 0.6:

    (p - y)^2 = (0.6 - 0)^2 = 0.36

整体分数是所有样本的均值。


多分类问题的扩展

对于多分类问题(分类标签为 kkk 类),布里尔分数的定义为:

\text{Brier Score} = \frac{1}{N} \sum_{i=1}^N \sum_{k=1}^K (p_{i,k} - y_{i,k})^2

其中:

  • p_{i,k}​ 是样本 i 属于类别 k 的预测概率。
  • y_{i,k}​ 是样本 i 的实际类别标签(独热编码)。

优点

  1. 概率评估
    布里尔分数直接评价预测的概率值,而不仅仅是预测的类别结果。

  2. 简单易计算
    数学形式简单,容易实现。

  3. 适合不平衡数据
    适合概率预测问题,即使在类别分布不平衡的情况下,也能提供有意义的衡量。


缺点

  1. 忽略区分性
    布里尔分数没有直接衡量模型在不同类别之间的区分能力(如 ROC AUC 那样)。

  2. 范围较窄
    对于极端概率预测(如 0 和 1),可能对分数影响过大。


代码示例(Python)

以下是计算布里尔分数的一个示例代码:

from sklearn.metrics import brier_score_loss
import numpy as np

# 真实标签(0或1)
y_true = np.array([0, 1, 1, 0, 1])

# 预测概率
y_prob = np.array([0.1, 0.9, 0.8, 0.4, 0.7])

# 计算布里尔分数
brier_score = brier_score_loss(y_true, y_prob)

print(f"Brier Score: {brier_score:.4f}")

输出结果

Brier Score: 0.0620

总结

布里尔分数是一种评估模型概率预测能力的重要指标。

  • 它关注模型的预测概率是否接近真实标签,而非单纯地评估分类准确率。
  • 在许多概率预测任务(如天气预测、信用评分等)中得到广泛应用。

通过合理使用布里尔分数,可以更全面地了解模型的预测质量并指导模型改进。


http://www.kler.cn/a/449462.html

相关文章:

  • 链表的详解
  • K8S 黑魔法之如何从 Pod 拿到节点的命令行
  • 公交车信息管理系统:实现交通数据的智能化处理
  • 如何解决 ‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题
  • [react 3种方法] 获取ant组件ref用ts如何定义?
  • LLaMA-Factory(二)界面解析
  • 前端开发 之 12个鼠标交互特效下【附完整源码】
  • Pinia与Vuex的区别
  • ARM异常处理 M33
  • 单片机:实现自动关机电路(附带源码)
  • 【自动化】深度解析仓库存储UI自动化
  • Android简洁缩放Matrix实现图像马赛克,Kotlin
  • ubuntu20.04安装imwheel实现鼠标滚轮调速
  • Kubernetes(K8s)学习笔记
  • 基于YOLOv5的智能水域监测系统:从目标检测到自动报告生成
  • 基于Spring Boot的建材租赁系统
  • C/C++基础知识复习(44)
  • 网络安全渗透有什么常见的漏洞吗?
  • 2024年A股最新退市规则
  • mysql 基于chunk机制是如何支持运行期间,动态调整buffer pool大小的
  • 基于微信小程序的在线教育平台设计与实现
  • c语言----顺序结构
  • neo4j console 报错
  • 地理数据库Telepg面试内容整理-Telepg地理数据库概述
  • MySQL EXPLAIN 详解:一眼看懂查询计划
  • Python入门:4.Python中的运算符