导读:混淆矩阵.当我们已经获取到一个分类模型的预测值,可以通过不同指标来进行评估。.往往衡量二分类模型是基于以下的混淆矩阵概念:.True Positive:真实值为正、预测值为正(真阳性).False Positive:真实值为负、预测值为正(假阳性).False Negative:
当我们已经获取到一个分类模型的预测值,可以通过不同指标来进行评估。
往往衡量二分类模型是基于以下的混淆矩阵概念:
但面对多个分类,比如40多个类别时无法单纯通过正负来混淆矩阵的每个值。在多个类别分类中,可以将每个类别视为应该独立的二元分类问题。对于每个类别A,其余不是类别A的样本可以临时合并为应该“非A”类别。我们将以上定义为:
真阳性 (TP):对于特定类别A,TP是正确标记为A 的样本数量。
假阳性 (FP):对于特定类别A,FP是错误地 标记为A的其他 类别的样本数量。
假阴性 (FN):对于特定类别A,FN是实际为A 但没有被标记为A 的样本数量。
真阴性 (TN):对于特定类别A,TN是既不属于A也没有被标记为A的样本数量。
\[Accuracy = \frac{TP+TN}{\text{No.samples}} \]
\[Precision = \frac{TP}{TP+FP} \]
\[Recall = \frac{TP}{TP+FN} \]
\[F1 Score = 2 \times \frac{Precision \times Recall}{Presision+Recall} \]
F1 Score用于衡量精确度和召回率之间的平衡,作为评估标准更加全面。
适用于评估类别不平衡 的情况。
F1 Score相当于 Precision 和 Recall的调和平均数
\[F1 Score = \frac {2TP}{2TP+FP+FN} \]
* **调和平均数 (Harmonic mean)** 经常被用与分子相同、分母不同的场合,将分母调成平均数再当分母。
\[Hn = \frac{n}{\sum{i=1}^n \frac{1}{x_i}} \]
其中后三种measure在衡量整个数据时,通过以下方式汇总这些指标:
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
y_true = [...] # 正确的标签
y_pred = [...] # 预测的标签
conf_mat = confusion_matrix(y_true, y_pred)
disp = ConfusionMatrixDisplay(confusion_matrix=conf_mat,
display_labels=np.unique(y_true)
)
disp.plot()
python中想要计算如上指标主要是使用 sklearn
包中预先写好的函数。可以使用以下代码进行计算:
from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score
y_true = [...] # 正确的标签
y_pred = [...] # 预测的标签
# 计算正确率
accuracy = accuracy_score(y_true, y_pred)
# 计算精确度、召回率和F1分数
precision = precision_score(y_true, y_pred, average='macro') # 'macro'表示未加权平均
recall = recall_score(y_true, y_pred, average='macro')
f1 = f1_score(y_true, y_pred, average='macro')
或者可以一次性获取所有分类指标的报告。输出的是一个string,每一行为每个类别的统计指标。
from sklearn.metrics import classification_report
# 如果使用`output_dict=True`将获得字典输出, 每个key为一个类别,value为这个类别的各指标dict。
report = classification_report(y_true, y_pred, output_dict=False)
print(report)
上一篇:何时使用GraphQL、gRPC
下一篇:MFAN论文阅读笔记(待复现)