深度学习分类任务评价指标

0 分类问题评价指标

混淆矩阵

混淆矩阵:Actual :实际的正类或父类; Predicted  : 预测的;1 :正类  0:父类

  predictedpredicted 
  10 
Actual  1TPFN 
Actual   :0FPTN 
  P:预测正N:预测负P  +  N

TN=True Negative 真负,将负类预测为负类的数量P
FP=False Positive 假正,将负类预测为正类的数量,可以称为误报率
FN=False Negative 假负,将正类预测为负类的数量,可以称为漏报率
TP=True Positve 真正,将正类预测为正类的数量

0: TN+FP:Actual Negative 实际上负类的数量
N = TN+FN : Actual Positive 预测的负类数量
1 :TP+FN:Predicted Negative实际的正类数量
P = TP+FP : Predicted Positive 预测的正类数量

记忆方法:
T=True=+1            F=False=-1      (T和N并不是指代实际的是正类和负类
P=Positive=+1      N=Negative=-1 (P和N指明了预测的是正类还是负类)
实际正例=+1         实际负例=-1

准确率(accuary)

准确率accuary = \frac{TP+TN}{P+N}   =正确分类数量 / (样本总数=所有正例P+所有负例N)

精确率 (precision)

精确率precision = \frac{TP}{TP+FP}p =被预测为正例的示例中实际为正例的比例

精确率是针对预测结果而言的,表示的是预测为正的样本中有多少是真正的正样本,预测为正就有两种可能,一种是把正类预测为正类(TP),另一种就是把负类预测为正类(FP),即 P = TP / (TP+FP)

召回率 (recall)

召回率recall = \frac{TP}{TP+FN} =所有实际正例中有多少正例被找到

召回率是针对原来样本而言的,表示的是样本中的正例有多少被预测正确,同样也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN),即 R = TP / (TP+FN)

F1 score

F1 score 为精确率与召回率的调和均值

\frac{2}{F1} = \frac{1}{precision}\dotplus \frac{1}{recall}       即 F1=\frac{2TP}{2TP+FP+FNFP+FN}

准确率accuracy和精确率precision都高的情况下,F1 score也会显得很高

ROC curve


逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。如果我们减小这个阀值,更多的样本会被识别为正类。提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了直观表示这一现象,此处引入ROC,ROC曲线可以用于评价一个分类器好坏。

ROC关注两个指标

True Positive Rate: TPR = TP / (TP+FN) → 将正例分对的概率
Fales Positive Rate: FPR = FP / (FP+TN) → 将负例错分为正例的概率


在 ROC 空间中,每个点的横坐标是 FPR纵坐标是 TPR,这也就描绘了分类器在 TP(真正率)和 FP(假正率)间的 trade-off。

AUC


AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。总之:AUC值越大的分类器,正确率越高。

AUC = 1:绝对完美分类器,理想状态下,100%完美识别正负类,不管阈值怎么设定都能得出完美预测,绝大多数预测不存在完美分类器;
0.5<AUC<1:优于随机猜测。这个分类器(模型)妥善设定阈值的话,可能有预测价值;
AUC=0.5:跟随机猜测一样(例:随机丢N次硬币,正反出现的概率为50%),模型没有预测价值;
AUC<0.5:比随机猜测还差;但只要总是反预测而行,就优于随机猜测,因此不存在AUC<0.5的状况。

### 深度学习分类任务的评估指标 #### 准确率 (Accuracy) 准确率是所有预测正确的样本数占总样本数的比例。对于多分类问题,准确率可以衡量整体分类效果的好坏[^1]。 ```python from sklearn.metrics import accuracy_score y_true = [0, 1, 2, 2, 2] y_pred = [0, 0, 2, 2, 1] accuracy = accuracy_score(y_true, y_pred) print(f'Accuracy: {accuracy}') ``` 然而,当类别分布不均衡时,高准确率可能掩盖了某些类别的低表现情况。 #### 精确率 (Precision) 精确率反映了模型预测为某个特定类别中的正确比例。对于每个类别 \(i\) ,其计算方式如下: \[ P_i=\frac{TP_i}{TP_i+FP_i} \] 其中 \( TP_i \) 表示真正例数量,\( FP_i \) 是假正例的数量。 ```python from sklearn.metrics import precision_score precision_macro = precision_score(y_true, y_pred, average='macro') print(f'Macro Precision: {precision_macro}') precision_micro = precision_score(y_true, y_pred, average='micro') print(f'Micro Precision: {precision_micro}') ``` #### 召回率 (Recall) 召回率表示实际属于某一类别的样本中有多少被成功检测出来。同样针对每一个类别 \( i \),公式为: \[ R_i=\frac{TP_i}{TP_i+FN_i} \] 这里 \( FN_i \) 代表的是该类别下的漏报数目。 ```python recall_macro = recall_score(y_true, y_pred, average='macro') print(f'Macro Recall: {recall_macro}') recall_micro = recall_score(y_true, y_pred, average='micro') print(f'Micro Recall: {recall_micro}') ``` #### F1分数 (F1 Score) 由于单独考虑精确率或召回率可能会偏向某一方而忽略另一方的重要性,因此引入了综合两者优点的F1得分。它通过调和平均的方式平衡二者关系: \[ F_1=2\times(\frac{{Precision}\times{Recall}}{{Precision}+{Recall}}) \] 此度量特别适用于处理不平衡数据集的情形下优化模型性能[^3]。 ```python f1_macro = f1_score(y_true, y_pred, average='macro') print(f'Macro F1-Score: {f1_macro}') f1_micro = f1_score(y_true, y_pred, average='micro') print(f'Micro F1-Score: {f1_micro}') ``` #### 混淆矩阵 (Confusion Matrix) 混淆矩阵提供了一个直观的方式来展示各类别之间的预测结果对比。每一行对应真实标签,列则显示预测的结果。这有助于深入分析各个类别的误判模式以及总体分类质量[^4]。 ```python import seaborn as sns import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_true, y_pred) sns.heatmap(cm, annot=True, fmt="d", cmap="Blues") plt.title('Confusion matrix') plt.ylabel('True label') plt.xlabel('Predicted label') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值