【学习笔记】直观理解常用的分类评价指标

评价指标是针对将相同的数据,输入不同的算法模型,或者输入不同参数的同一种算法模型,而给出这个算法或者参数好坏的定量指标。
在模型评估过程中,往往需要使用多种不同的指标进行评估,在诸多的评价指标中,大部分指标只能片面的反应模型的一部分性能,如果不能合理的运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。
下面是几个常见的评价指标:

1.准确率

准确率是最常见的几个指标之一,即预测成功结果占总结果的百分比。下面是使用案例

from sklearn.metrics import accuracy_score

y_pred = [0,1,2,3]
y_true = [0,2,1,3]

accuracy_score(y_true,y_pred)

以上代码会输出准确率。

优点:计算简单易懂
缺点:当样本不平衡的时候,准确率会失效。例如以下情况:

y_pred = [1,1,1,1,1,1,1,1,1,1,1,1,1]
y_true = [1,1,1,1,0,1,1,1,1,1,1,1,1]

这时候,如果模型全部预测1,准确率也会高达90%
处理办法:将样本进行重采样,过采样,欠采样,或更换评价指标为f1_score它不仅考虑错误数量,还考虑错误类型。

2.混淆矩阵

混淆矩阵是将预测值和真实值分别放置到横轴和纵轴,每个类别作为纵轴和横轴上的坐标。有几种真实值就有几个坐标,然后观察其对角线上的元素的准确率,分别代表各个类别的准确率。

其python代码为 

import matplotlib.pyplot as plt
import scikitplot as akplt
y_pred = [1,1,1,1,1,1,1,1,1,1,1,1,1]
y_true = [1,1,1,1,0,1,1,1,1,1,1,1,1]

#生成混淆矩阵
skplt.metrics.plot_confusion_matrix(y_true,y_pred,normalize = True)
plt.show()

3.精准率和召回率

精准率就是我们所预测的为真的样本种真正为真的占比。我们在很需要为真的结果时,精准率越高越好。例如股票上涨情况,我们需要认为它真的上涨了。
召回率就是我们所预测为真的样本中对真正为真的样本的覆盖率,如果预测了一千次会发生地震,而其中的十次刚好在其范围内,它的召回率就是100%,而精准率就是1%。其python代码如下

from sklearn.metrics import precision_score,recall_score
y_true = [0,0,0,1,1,1,1,1,1,1]
y_pred = [0,0,0,0,0,0,0,0,1,1]
#精准率
precision_score(y_true,y_pred,average = None)

#对于1和0的精准率取简单平均
precision_score(y_true,y_pred,average = "macro")   

#对于1和0的精准率取加权平均
precision_score(y_true,y_pred,average = "weighted")   

#与准确率相同
precision_score(y_true,y_pred,average = "micro")

#与之前类似,不做重复叙述
recall_score(y_true,y_pred,average = None)   
recall_score(y_true,y_pred,average = "macro") 
recall_score(y_true,y_pred,average = "weighted") 
recall_score(y_true,y_pred,average = "micro") 

4.f1_score

f1_score的预测就是精准率和召回率取调和平均数,就相当于对于精准率和召回率的一个加权平均。它的特点是对于越高的值,取越低的权重。否则,我们认为精准率和召回率是可以相互替代的。因为精准率和召回率都是0.8,和精准率和召回率分别为0.9和0.7是相同的分数,这样显然不合适,因为不同模型的需求是不同的。这样就避免了因为一个指标高,另一个指标低造成的均值虚高的情况。

from sklearn.matrics import f1_score
y_true = [0,0,0,1,1,1,1,1,1,1]
y_pred = [0,0,0,0,0,0,0,0,1,1]
#与之前类似
f1_score(y_true,y_pred,average = None)   
f1_score(y_true,y_pred,average = "macro") 
f1_score(y_true,y_pred,average = "weighted") 
f1_score(y_true,y_pred,average = "micro") 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值