1 f1_score,average='binary', 'macro', 'micro', 'weighted'
F1得分可以解释为精确度和召回率的调和平均值,其中F1得分达到其最佳值为1,最差得分为0。精确度和召回率对F1得分的相对贡献相等。F1得分的公式为:
在多类别和多标签的情况下,这是每个类别的F1得分的平均值,其权重取决于平均参数。
sklearn.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
参数介绍:
y_true:1d array,或label array/sparse matrix,Ground truth (correct) target values
y_pred: 分类器返回的估计目标。
pos_label:str or int, default=1,要报告 average = ‘ binary’且数据为二分类。如果数据是多类或多标签的,这将被忽略; 设置labels = [ pos _ label ]和average!= “binary”将只报告该标签的分数。
average: 该参数是多类/多标签目标所必需的。如果没有,则返回每个类的分数。否则,这将确定对数据执行的平均类型:
'binary'
: 仅报告pos_label指定的类的结果。这仅适用于目标 (y_{true,pred}) 是二分类的。
'micro': 通过计算总真阳性、假阴性和假阳性来全局计算指标。
权重倾向:每一个样本的权重都相同;
适用环境:多分类不平衡,若数据极度不平衡会影响结果;
'macro': 计算每个标签的指标,并找到它们的未加权平均值。
取值范围:每一类别的权重都相同;
适用环境:多分类问题,不受数据不平衡影响,容易受到识别性高(高recall、高precision)的类别影响;
'weighted'
: 计算每个标签的指标,并找到它们的平均加权支持 (每个标签的真实实例数)。这会改变 “macro” 以解决标签不平衡; 它可能导致F分数不在精度和召回率之间。
'samples'
: 计算每个实例的指标,并找到它们的平均值 (仅对于与accuracy_score不同的多标签分类有意义)。
代码展示:
二分类情况:
>>> from sklearn.metrics import precision_score, recall_score, f1_score
>>> y_true = [0, 1, 0, 0, 1, 0, 1]
>>> y_pred = [0, 1, 0, 0, 0, 1, 0]
# 计算二分类情况下的average = 'macro' 'micro' 'binary'
# 二分类情况下,也能用macro和micro,但一般用binary
>>> f1_score(y_true, y_pred,average='macro')
0.5333333333333332
>>> precision_score(y_true, y_pred, average='macro')
0.55
>>> recall_score(y_true, y_pred, average='macro')
0.5416666666666666
>>> precision_score(y_true, y_pred, average='micro')
0.5714285714285714
>>> recall_score(y_true, y_pred, average='micro')
0.5714285714285714
>>> f1_score(y_true, y_pred,average='micro')
0.5714285714285714
>>> f1_score(y_true, y_pred,average='binary')
0.4
>>> recall_score(y_true, y_pred, average='binary')
0.3333333333333333
>>> precision_score(y_true, y_pred, average='binary')
0.5
>>> f1_score(y_true, y_pred) # 二分类情况下,默认使用binary
0.4
多分类情况:
>>> from sklearn.metrics import precision_score, recall_score, f1_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> f1_score(y_true, y_pred, average='macro')
0.26666666666666666
>>> f1_score(y_true, y_pred, average='micro')
0.3333333333333333
>>> f1_score(y_true, y_pred, average=None) # 相当于binary,为每个类别计算binary的f1分数,但是不能输入binary,要输入None
array([0.8, 0. , 0. ])
>>> 0.8/3
0.26666666666666666
到此这篇关于sklearn.metrics 中的f1-score简介的文章就介绍到这了,更多相关sklearn.metrics 中f1-score内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!