1.为什么为会有f1这个指标
2.f1的定义以及使用
公式:f1 = 2*p*r/(p+r)
f1的值在0和1之间,越大越好。准确率p和召回率r对f1的贡献是相等。
调用: from sklearn.metrics import f1_score
f1_score (y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)
多分类和多标签情况下,输出结果跟参数average有关系。
1)average : string, [None, ‘binary’ (default), ‘micro’, ‘macro’, ‘weighted’, ‘samples’],有6中取值,意义如下:
- None:返回每一类各自的f1_score,得到一个array。
- 'binary': 只对二分类问题有效,返回由pos_label指定的类的f1_score。
- 'micro': 设置average='micro'时,Precision = Recall = F1_score = Accuracy。整体计算TP,FN,FP
- 'macro': 对每一类别的f1_score进行简单算术平均(unweighted mean),这类有一个前提假设:每一个类都同等的重要。
- 'weighted': 对每一类别的f1_score进行加权平均,权重为各类别数在y_true中所占比例。
- 'samples':用于多标签任务,按照样本维度计算混淆矩阵,然后计算平均值。Calculate metrics for each instance, and find their average (only meaningful for multilabel classification where this differs from accuracy_score).
3.sklearn:从二分类到多分类和多标签
主要内容摘要:
4.例子
from sklearn.metrics import f1_score, accuracy_score
y_true = [0, 1, 2, 0, 1, 2, 2]
y_pred = [0, 2, 1, 0, 0, 1, 1]
macro = f1_score(y_true, y_pred, average='macro')
micro = f1_score(y_true, y_pred, average='micro')
weighted = f1_score(y_true, y_pred, average='weighted')
none = f1_score(y_true, y_pred, average=None)
acc = accuracy_score(y_true, y_pred)
print(micro==acc)
参考:
1.
2.
3.sklearn:https://scikit-learn.org/stable/modules/model_evaluation.html#average
4.f1比较好的例子:https:///lyb3b3b/article/details/84819931