https://blog.csdn.net/hfutdog/article/details/88085878
- 准确率
准确率=正确/所有
from sklearn.metrics import accuracy_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
print(accuracy_score(y_true, y_pred)) # 0.5
print(accuracy_score(y_true, y_pred, normalize=False)) # 2
# normalize : 布尔值, 可选的(默认为True).
# 如果为False,返回分类正确的样本数量,否则,返回正确分类的得分.
def accuracy(y_pred,y_true):
from sklearn.metrics import accuracy_score
return accuracy_score(y_pred,y_true)
- 精准率 Precision
精确率=
它表示的是预测为正的样本中有多少是真正的正样本
Macro Average
宏平均是指在计算均值时使每个类别具有相同的权重,最后结果是每个类别的指标的算术平均值。
Micro Average
微平均是指计算多分类指标时赋予所有类别的每个样本相同的权重,将所有样本合在一起计算各个指标。
Weighted
为每个标签计算指标,并通过各类占比找到它们的加权均值(每个标签的正例数).它解决了’macro’的标签不平衡问题
from sklearn.metrics import precision_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(precision_score(y_true, y_pred, average='macro')) # 0.2222222222222222
print(precision_score(y_true, y_pred, average='micro')) # 0.3333333333333333
print(precision_score(y_true, y_pred, average='weighted')) # 0.2222222222222222
print(precision_score(y_true, y_pred, average=None)) # [0.66666667 0. 0.]
def precision(y_true, y_pred):
from sklearn.metrics import precision_score
return precision_score(y_true, y_pred, average='micro')
- 召回率 Recall
召回率=
它表示的是样本中的正例有多少被预测正确了
from sklearn.metrics import recall_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(recall_score(y_true, y_pred, average='macro')) # 0.3333333333333333
print(recall_score(y_true, y_pred, average='micro')) # 0.3333333333333333
print(recall_score(y_true, y_pred, average='weighted')) # 0.3333333333333333
print(recall_score(y_true, y_pred, average=None)) # [1. 0. 0.]
def recall():
from sklearn.metrics import recall_score
return recall_score(y_true, y_pred, average='macro')
- F1-Score
综合反映Precision(双真/预测真,准不准)和Recall(双真/真实真,全不全)的结果(二者的调和平均值)
from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(f1_score(y_true, y_pred, average='macro')) # 0.26666666666666666
print(f1_score(y_true, y_pred, average='micro')) # 0.3333333333333333
print(f1_score(y_true, y_pred, average='weighted')) # 0.26666666666666666
print(f1_score(y_true, y_pred, average=None)) # [0.8 0. 0. ]
def f1_score():
from sklearn.metrics import f1_score
return f1_score(y_true, y_pred, average='micro')
- Macro Average(宏平均)
宏平均是指在计算均值时使每个类别具有相同的权重,最后结果是每个类别的指标的算术平均值。
- Micro Average(微平均)
微平均是指计算多分类指标时赋予所有类别的每个样本相同的权重,将所有样本合在一起计算各个指标。
- weighted
为每个标签计算指标,并通过各类占比找到它们的加权均值(每个标签的正例数).它解决了’macro’的标签不平衡问题;它可以产生不在精确率和召回率之间的F-score.
TP:预测为正向(P),实际上预测正确(T),即判断为正向的正确率。
TN:预测为负向(N),实际上预测正确(T),即判断为负向的正确率。
FP:预测为正向(P),实际上预测错误(F),误报率,即把负向判断成了正向。
FN:预测为负向(N),实际上预测错误(F),漏报率,即把正向判断称了负向。
- 如果每个类别的样本数量差不多,那么宏平均和微平均没有太大差异
- 如果每个类别的样本数量差异很大,那么注重样本量多的类时使用微平均,注重样本量少的类时使用宏平均
- 如果微平均大大低于宏平均,那么检查样本量多的类来确定指标表现差的原因
- 如果宏平均大大低于微平均,那么检查样本量少的类来确定指标表现差的原因
- TP,TN,FN,FP的表示法
准确率Accuracy=(TP+TN) / (TP+FP+TN+FN), 即预测正确的比上全部的数据
精确率Precision=TP / (TP+FP),即在预测为正向的数据中,有多少预测正确了
召回率Recall=TP / (TP+FN),即在所有正向的数据中,有多少预测正确了
灵敏度和特异度
灵敏度 (不漏诊)=真阳性人数/(真阳性人数+假阴性人数)*100%
特异度 (不误诊)=真阴性人数/(真阴性人数+假阳性人数))*100%