AUC
类tf_keras.metrics.AUC(
num_thresholds=200,
curve="ROC",
summation_method="interpolation",
name=None,
dtype=None,
thresholds=None,
multi_label=False,
num_labels=None,
label_weights=None,
from_logits=False,
)
估算 ROC 或 PR 曲线的 AUC(曲线下面积)。
ROC(接收者操作特征;默认)或 PR(精确率-召回率)曲线的 AUC(曲线下面积)是二元分类器的质量度量。与准确率不同,与交叉熵损失类似,ROC-AUC 和 PR-AUC 评估模型的所有操作点。
此类使用黎曼和估算 AUC。在指标累积阶段,预测值按值在预定义的桶中累积。然后通过插值每个桶的平均值来计算 AUC。这些桶定义了评估的操作点。
此指标创建四个局部变量:true_positives
、true_negatives
、false_positives
和 false_negatives
,用于计算 AUC。为了离散化 AUC 曲线,使用一组线性间隔的阈值来计算成对的召回率和精确率值。因此,ROC 曲线下的面积是根据召回率值相对于假阳性率计算的,而 PR 曲线下的面积是根据精确率值相对于召回率计算的。
该值最终以 auc
的形式返回,这是一个幂等操作,用于计算离散化的精确率-召回率曲线下的面积(使用上述变量计算)。num_thresholds
变量控制离散化程度,阈值数量越多,越接近真实的 AUC。估算质量可能因 num_thresholds
的不同而显着变化。thresholds
参数可用于手动指定阈值,以便更均匀地划分预测结果。
为了更好地估算真实的 AUC,predictions
(如果 from_logits=False
)应近似均匀地分布在 [0, 1] 范围内。如果不是这种情况,AUC 估算的质量可能会较差。将 summation_method
设置为 'minoring' 或 'majoring' 可以通过提供 AUC 的下限或上限估算来帮助量化估算中的误差。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
参数
200
。ROC
应用中点求和方案。对于 PR-AUC,它插值(真/假)阳性,但不插值作为精确率的比率(详见 Davis & Goadrich 2006);'minoring' 对递增区间应用左求和,对递减区间应用右求和;'majoring' 则相反。num_thresholds
参数。值应在 [0, 1] 范围内。对于小的正 epsilon 值,将自动包含等于 {-epsilon, 1+epsilon} 的端点阈值,以正确处理恰好等于 0 或 1 的预测值。multi_label
为 True 时使用。如果未指定 num_labels
,则在第一次调用 update_state
时创建状态变量。multi_label
为 True 时,这些权重应用于单个标签 AUC,以便在计算多标签 AUC 时进行平均。当为 False 时,它们用于在展平数据上计算混淆矩阵时对单个标签预测进行加权。请注意,这与 class_weights 不同,class_weights 根据标签值对样本进行加权,而 label_weights 仅取决于展平之前该标签的索引;因此,label_weights
不应用于多类数据。update_state
中的 y_pred
)是概率还是 sigmoid logits。一般来说,当使用 Keras 损失函数时,损失函数的 from_logits
构造函数参数应与 AUC 的 from_logits
构造函数参数匹配。独立使用
>>> m = tf.keras.metrics.AUC(num_thresholds=3)
>>> m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
>>> # threshold values are [0 - 1e-7, 0.5, 1 + 1e-7]
>>> # tp = [2, 1, 0], fp = [2, 0, 0], fn = [0, 1, 2], tn = [0, 2, 2]
>>> # tp_rate = recall = [1, 0.5, 0], fp_rate = [1, 0, 0]
>>> # auc = ((((1+0.5)/2)*(1-0)) + (((0.5+0)/2)*(0-0))) = 0.75
>>> m.result().numpy()
0.75
>>> m.reset_state()
>>> m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9],
... sample_weight=[1, 0, 0, 1])
>>> m.result().numpy()
1.0
与 compile()
API 的使用方法
# Reports the AUC of a model outputting a probability.
model.compile(optimizer='sgd',
loss=tf.keras.losses.BinaryCrossentropy(),
metrics=[tf.keras.metrics.AUC()])
# Reports the AUC of a model outputting a logit.
model.compile(optimizer='sgd',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.AUC(from_logits=True)])
Precision
类tf_keras.metrics.Precision(
thresholds=None, top_k=None, class_id=None, name=None, dtype=None
)
计算预测值相对于标签的精确率。
此指标创建两个局部变量:true_positives
和 false_positives
,用于计算精确率。该值最终以 precision
的形式返回,这是一个幂等操作,简单地将 true_positives
除以 true_positives
和 false_positives
的和。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
如果设置了 top_k
,我们将计算精确率,即在批处理条目中预测值最高的 top-k 类中,有多少类平均而言是正确的并且可以在该条目的标签中找到。
如果指定了 class_id
,我们通过仅考虑批处理中 class_id
高于阈值和/或在 top-k 最高预测中的条目来计算精确率,并计算其中 class_id
确实是正确标签的条目所占的比例。
参数
true
,低于阈值为 false
)。如果与设置了 from_logits=True
的损失函数一起使用(即未对预测应用 sigmoid),则 thresholds
应设置为 0。每个阈值生成一个指标值。如果既未设置 thresholds 也未设置 top_k,则默认使用 thresholds=0.5
计算精确率。[0, num_classes)
中,其中 num_classes
是预测值的最后一个维度。独立使用
>>> m = tf.keras.metrics.Precision()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result().numpy()
0.6666667
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result().numpy()
1.0
>>> # With top_k=2, it will calculate precision over y_true[:2]
>>> # and y_pred[:2]
>>> m = tf.keras.metrics.Precision(top_k=2)
>>> m.update_state([0, 0, 1, 1], [1, 1, 1, 1])
>>> m.result().numpy()
0.0
>>> # With top_k=4, it will calculate precision over y_true[:4]
>>> # and y_pred[:4]
>>> m = tf.keras.metrics.Precision(top_k=4)
>>> m.update_state([0, 0, 1, 1], [1, 1, 1, 1])
>>> m.result().numpy()
0.5
与 compile()
API 的使用方法
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.Precision()])
与设置了 from_logits=True
的损失函数一起使用
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.Precision(thresholds=0)])
Recall
类tf_keras.metrics.Recall(
thresholds=None, top_k=None, class_id=None, name=None, dtype=None
)
计算预测值相对于标签的召回率。
此指标创建两个局部变量:true_positives
和 false_negatives
,用于计算召回率。该值最终以 recall
的形式返回,这是一个幂等操作,简单地将 true_positives
除以 true_positives
和 false_negatives
的和。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
如果设置了 top_k
,将计算召回率,即批处理条目标签中的类平均而言有多少出现在 top-k 预测中。
如果指定了 class_id
,我们通过仅考虑批处理中包含 class_id
的标签的条目来计算召回率,并计算其中 class_id
高于阈值和/或在 top-k 预测中的条目所占的比例。
参数
true
,低于阈值为 false
)。如果与设置了 from_logits=True
的损失函数一起使用(即未对预测应用 sigmoid),则 thresholds
应设置为 0。每个阈值生成一个指标值。如果既未设置 thresholds 也未设置 top_k,则默认使用 thresholds=0.5
计算召回率。[0, num_classes)
中,其中 num_classes
是预测值的最后一个维度。独立使用
>>> m = tf.keras.metrics.Recall()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result().numpy()
0.6666667
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result().numpy()
1.0
与 compile()
API 的使用方法
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.Recall()])
与设置了 from_logits=True
的损失函数一起使用
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.Recall(thresholds=0)])
TruePositives
类tf_keras.metrics.TruePositives(thresholds=None, name=None, dtype=None)
计算真阳性数量。
如果给定了 sample_weight
,则计算真阳性的权重之和。此指标创建一个局部变量 true_positives
,用于跟踪真阳性数量。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
参数
true
,低于阈值为 false
)。如果与设置了 from_logits=True
的损失函数一起使用(即未对预测应用 sigmoid),则 thresholds
应设置为 0。每个阈值生成一个指标值。默认为 0.5
。独立使用
>>> m = tf.keras.metrics.TruePositives()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result().numpy()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result().numpy()
1.0
与 compile()
API 的使用方法
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.TruePositives()])
与设置了 from_logits=True
的损失函数一起使用
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.TruePositives(thresholds=0)])
TrueNegatives
类tf_keras.metrics.TrueNegatives(thresholds=None, name=None, dtype=None)
计算真阴性数量。
如果给定了 sample_weight
,则计算真阴性的权重之和。此指标创建一个局部变量 accumulator
,用于跟踪真阴性数量。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
参数
true
,低于阈值为 false
)。如果与设置了 from_logits=True
的损失函数一起使用(即未对预测应用 sigmoid),则 thresholds
应设置为 0。每个阈值生成一个指标值。默认为 0.5
。独立使用
>>> m = tf.keras.metrics.TrueNegatives()
>>> m.update_state([0, 1, 0, 0], [1, 1, 0, 0])
>>> m.result().numpy()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 0, 0], [1, 1, 0, 0], sample_weight=[0, 0, 1, 0])
>>> m.result().numpy()
1.0
与 compile()
API 的使用方法
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.TrueNegatives()])
与设置了 from_logits=True
的损失函数一起使用
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.TrueNegatives(thresholds=0)])
FalsePositives
类tf_keras.metrics.FalsePositives(thresholds=None, name=None, dtype=None)
计算假阳性数量。
如果给定了 sample_weight
,则计算假阳性的权重之和。此指标创建一个局部变量 accumulator
,用于跟踪假阳性数量。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
参数
true
,低于阈值为 false
)。如果与设置了 from_logits=True
的损失函数一起使用(即未对预测应用 sigmoid),则 thresholds
应设置为 0。每个阈值生成一个指标值。默认为 0.5
。独立使用
>>> m = tf.keras.metrics.FalsePositives()
>>> m.update_state([0, 1, 0, 0], [0, 0, 1, 1])
>>> m.result().numpy()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 0, 0], [0, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result().numpy()
1.0
与 compile()
API 的使用方法
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.FalsePositives()])
与设置了 from_logits=True
的损失函数一起使用
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.FalsePositives(thresholds=0)])
FalseNegatives
类tf_keras.metrics.FalseNegatives(thresholds=None, name=None, dtype=None)
计算假阴性数量。
如果给定了 sample_weight
,则计算假阴性的权重之和。此指标创建一个局部变量 accumulator
,用于跟踪假阴性数量。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
参数
true
,低于阈值为 false
)。如果与设置了 from_logits=True
的损失函数一起使用(即未对预测应用 sigmoid),则 thresholds
应设置为 0。每个阈值生成一个指标值。默认为 0.5
。独立使用
>>> m = tf.keras.metrics.FalseNegatives()
>>> m.update_state([0, 1, 1, 1], [0, 1, 0, 0])
>>> m.result().numpy()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [0, 1, 0, 0], sample_weight=[0, 0, 1, 0])
>>> m.result().numpy()
1.0
与 compile()
API 的使用方法
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.FalseNegatives()])
与设置了 from_logits=True
的损失函数一起使用
model.compile(optimizer='adam',
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[tf.keras.metrics.FalseNegatives(thresholds=0)])
PrecisionAtRecall
类tf_keras.metrics.PrecisionAtRecall(
recall, num_thresholds=200, class_id=None, name=None, dtype=None
)
计算召回率 >= 指定值时的最佳精确率。
此指标创建四个局部变量:true_positives
、true_negatives
、false_positives
和 false_negatives
,用于计算给定召回率下的精确率。计算给定召回率值的阈值,并用于评估相应的精确率。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
如果指定了 class_id
,我们通过仅考虑批处理中 class_id
高于阈值预测的条目来计算精确率,并计算其中 class_id
确实是正确标签的条目所占的比例。
参数
[0, 1]
范围内的标量值。200
。[0, num_classes)
中,其中 num_classes
是预测值的最后一个维度。独立使用
>>> m = tf.keras.metrics.PrecisionAtRecall(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result().numpy()
0.5
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
... sample_weight=[2, 2, 2, 1, 1])
>>> m.result().numpy()
0.33333333
与 compile()
API 的使用方法
model.compile(
optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.PrecisionAtRecall(recall=0.8)])
SensitivityAtSpecificity
类tf_keras.metrics.SensitivityAtSpecificity(
specificity, num_thresholds=200, class_id=None, name=None, dtype=None
)
计算特异度 >= 指定值时的最佳敏感度。
给定特异度下的敏感度。
Sensitivity
(敏感度)衡量正确识别为阳性的实际阳性样本比例 (tp / (tp + fn))。Specificity
(特异度)衡量正确识别为阴性的实际阴性样本比例 (tn / (tn + fp))。
此指标创建四个局部变量:true_positives
、true_negatives
、false_positives
和 false_negatives
,用于计算给定特异度下的敏感度。计算给定特异度值的阈值,并用于评估相应的敏感度。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
如果指定了 class_id
,我们通过仅考虑批处理中 class_id
高于阈值预测的条目来计算精确率,并计算其中 class_id
确实是正确标签的条目所占的比例。
有关特异度和敏感度的更多信息,请参阅 此处。
参数
[0, 1]
范围内的标量值。200
。[0, num_classes)
中,其中 num_classes
是预测值的最后一个维度。独立使用
>>> m = tf.keras.metrics.SensitivityAtSpecificity(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result().numpy()
0.5
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
... sample_weight=[1, 1, 2, 2, 1])
>>> m.result().numpy()
0.333333
与 compile()
API 的使用方法
model.compile(
optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.SensitivityAtSpecificity()])
SpecificityAtSensitivity
类tf_keras.metrics.SpecificityAtSensitivity(
sensitivity, num_thresholds=200, class_id=None, name=None, dtype=None
)
计算敏感度 >= 指定值时的最佳特异度。
Sensitivity
(敏感度)衡量正确识别为阳性的实际阳性样本比例 (tp / (tp + fn))。Specificity
(特异度)衡量正确识别为阴性的实际阴性样本比例 (tn / (tn + fp))。
此指标创建四个局部变量:true_positives
、true_negatives
、false_positives
和 false_negatives
,用于计算给定敏感度下的特异度。计算给定敏感度值的阈值,并用于评估相应的特异度。
如果 sample_weight
为 None
,权重默认为 1。使用 0 作为 sample_weight
可屏蔽值。
如果指定了 class_id
,我们通过仅考虑批处理中 class_id
高于阈值预测的条目来计算精确率,并计算其中 class_id
确实是正确标签的条目所占的比例。
有关特异度和敏感度的更多信息,请参阅 此处。
参数
[0, 1]
范围内的标量值。200
。[0, num_classes)
中,其中 num_classes
是预测值的最后一个维度。独立使用
>>> m = tf.keras.metrics.SpecificityAtSensitivity(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result().numpy()
0.66666667
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
... sample_weight=[1, 1, 2, 2, 2])
>>> m.result().numpy()
0.5
与 compile()
API 的使用方法
model.compile(
optimizer='sgd',
loss='binary_crossentropy',
metrics=[tf.keras.metrics.SpecificityAtSensitivity()])