brier_score_loss#
- sklearn.metrics.brier_score_loss(y_true, y_proba, *, sample_weight=None, pos_label=None, labels=None, scale_by_half='auto')[source]#
计算 Brier 分数损失。
布里尔分数损失越小越好,因此以“损失”命名。布里尔分数衡量预测概率与实际结果之间的均方差。布里尔分数是一种严格的适当评分规则。
在用户指南中了解更多信息。
- 参数:
- y_true形状为 (n_samples,) 的 array-like
真实目标值。
- y_proba形状为 (n_samples,) 或 (n_samples, n_classes) 的类似数组对象
预测概率。如果
y_proba.shape = (n_samples,),则提供的概率被假定为正类的概率。如果y_proba.shape = (n_samples, n_classes),则y_proba中的列被假定对应于按字母顺序排列的标签,这与LabelBinarizer的做法一致。- sample_weightshape 为 (n_samples,) 的 array-like, default=None
样本权重。
- pos_labelint, float, bool or str, default=None
当
y_proba.shape = (n_samples,)时,正类的标签。如果未提供,pos_label将按以下方式推断:如果
y_true在 {-1, 1} 或 {0, 1} 中,pos_label默认为 1;否则,如果
y_true包含字符串,将引发错误,且应明确指定pos_label;否则,
pos_label默认为较大的标签,即np.unique(y_true)[-1]。
- labels形状为 (n_classes,) 的类数组对象, 默认为 None
当
y_proba.shape = (n_samples, n_classes)时,类标签。如果未提供,标签将从y_true推断。在版本 1.7 中新增。
- scale_by_halfbool 或 “auto”, default=”auto”
当为 True 时,将布里尔分数除以 1/2,使其范围位于 [0, 1] 而不是 [0, 2]。默认的 “auto” 选项仅对二分类(习惯上如此)进行重新缩放至 [0, 1],但保留多分类的原始 [0, 2] 范围。
在版本 1.7 中新增。
- 返回:
- scorefloat
布里尔分数损失。
注意事项
对于 \(N\) 个观测值,标签来自 \(C\) 个可能的类别,布里尔分数定义为
\[\frac{1}{N}\sum_{i=1}^{N}\sum_{c=1}^{C}(y_{ic} - \hat{p}_{ic})^{2}\]其中 \(y_{ic}\) 如果观测值
i属于类别c则为 1,否则为 0;\(\hat{p}_{ic}\) 是观测值i属于类别c的预测概率。布里尔分数范围在 \([0, 2]\) 之间。在二分类任务中,布里尔分数通常除以二,然后范围在 \([0, 1]\) 之间。它也可以写成
\[\frac{1}{N}\sum_{i=1}^{N}(y_{i} - \hat{p}_{i})^{2}\]其中 \(y_{i}\) 是二元目标,\(\hat{p}_{i}\) 是正类的预测概率。
References
[1]示例
>>> 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.3]) >>> brier_score_loss(y_true, y_prob) 0.0375 >>> brier_score_loss(y_true, 1-y_prob, pos_label=0) 0.0375 >>> brier_score_loss(y_true_categorical, y_prob, pos_label="ham") 0.0375 >>> brier_score_loss(y_true, np.array(y_prob) > 0.5) 0.0 >>> brier_score_loss(y_true, y_prob, scale_by_half=False) 0.075 >>> brier_score_loss( ... ["eggs", "ham", "spam"], ... [[0.8, 0.1, 0.1], [0.2, 0.7, 0.1], [0.2, 0.2, 0.6]], ... labels=["eggs", "ham", "spam"] ... ) 0.146