分类模型评价指标

准确率 平均准确率

准确率:

对于验证集,模型预测正确的样本数/ 预测的总样本数
a c c u r a c y = n c o r r e c t n t o t a l accuracy = \frac {n_{correct}} {n_{total}} accuracy=ntotalncorrect
缺点:
在训练集,验证集类别严重不平衡时,准确率无法全面评估模型

平均准确率:

对每个类别,计算准确率,然后所有类别准确率 求均值,作为模型的准确率

如:验证集中0类有95个样本,1类有5分样本,模型预测的时候将全部样本预测为0,此时准确率0.95,但是对1类全部预测错了,虽然准确率高,但是模型不好;而平均准确率为0.5,可以说明模型不好。
所以平均准确率,更能全面的评估模型

例子

y_test = [ 0,1,0,2,1,0]
y_pred = [0,2,0,1,2,0]

准确率: a c c u r a c y = 3 6 = 0.5 accuracy = \frac {3} {6} =0.5 accuracy=63=0.5
平均准确率:
a c c 0 = 1 acc_0 = 1 acc0=1
a c c 1 = 0 acc_1 = 0 acc1=0
a c c 2 = 0 acc_2 = 0 acc2=0
m e a n a c c = a c c 0 + a c c 1 + a c c 2 3 = 0.333 mean_{acc} = \frac {acc_0+acc_1+acc_2} {3} =0.333 meanacc=3acc0+acc1+acc2=0.333

代码

#手动实现计算准确率
n_correct = (y_pred == y_test).sum()
n_total = y_test.shape[0]
acc = n_correct / n_total

#sklearn 实现
from sklearn.metrics import accuracy_score
from sklearn.metrics import balanced_accuracy_score
acc = accuracy_score(y_test,y_pred)
mean_acc = balanced_accuracy_score(y_test,y_pred)

混淆矩阵

更详细的描述模型预测结果
2分类 --> 2x2矩阵
n分类 --> nxn矩阵

如下:2分类的混淆矩阵
在这里插入图片描述
真负率: T N T N + F P = 8 8 + 1 \frac {TN} {TN+FP} = \frac {8} {8+1} TN+FPTN=8+18
假正率: F P T N + F P = 1 8 + 1 \frac {FP} {TN+FP} = \frac {1} {8+1} TN+FPFP=8+11
假负率: F N F N + T P = 2 2 + 10 \frac {FN} {FN+TP} = \frac {2} {2+10} FN+TPFN=2+102
真正率: T P F N + T P = 10 2 + 10 \frac {TP} {FN+TP} =\frac {10} {2+10} FN+TPTP=2+1010

#sklearn API
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test,y_pred)

查准率 召回率 f1_score

查准率,召回率是一对矛盾的指标,一般同时使用
f1_score,是对两者的融合

查准率precision_score:从预测的角度出发,预测正确的样本数 / 预测为某一类的总数,二分类中只计算正类,
多分类中计算预测的每一类的查准率,求均值作为模型的查准率

召回率recall_score:从真实的角度出发,预测正确的样本数 / 某一类真实样本数,二分类只计算正类
多分类计算每一类的召回率,求均值作为模型的召回率

f 1 _ s c o r e = 2 ∗ p r e c i s i o n ∗ r e c a l l p r e c i s i o n + r e c a l l f1\_score = \frac {2 * precision * recall} {precision+recall} f1_score=precision+recall2precisionrecall

#sklearn 中的API
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score

#0,1 二分类
p = precision_score(y_test,y_pred)
#0,1,2多分类
p = precision_score(y_test,y_pred,average="macro")
#average计算平均值的方式
#macro 简单平均
#weighted 加权平均  预测的每一类的查准率*每一类真实样本的占比
#召回率计算方式同查准率 

分类报告

from sklearn.metrics import classification_report
r = classification_report(y_test,y_pred) 

如下:
在这里插入图片描述

ROC AUC

以FPR为横坐标,以TPR为纵坐标 的折线图
在这里插入图片描述
折线下的面积即为 AUC,类别不均衡时仍可以有效的评估模型,用于二分类

#sklearn API
from sklearn.metrics import roc_curve
from sklearn.metrics import roc_auc_score
fpr,tpr,threshold = roc_curve(y_test,y_pred_proba[:,1],pos_label=1)
auc = roc_auc_score(y_test,y_pred_proba[:,1])
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

laufing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值