导语
就我们在使用机器学习对数据库进行训练的时候会用到很多指标对这种方法的结果进行评估,本文就学习一些常见的评估方法吧。
指标说明
嗯嗯现在我们开始说一般有哪些指标(其实通常是在医学的研究中),我们选取了一张我们导师给我的图(艾玛具体是从哪篇论文中找出来的我还真不清楚,暂且忽略这个吧,反正我也不用它的结果,只是看看有哪些指标)
看到了一堆指标吧,我们一个一个来说
·Accuracy:准确度,看这个名字应该不难直觉它的计算方法是
判断正确的次数总的判断的次数
·Sensitivity(tpr):敏感度,这个的计算方式是
判断有病且判断正确的次数总的有病的次数
·Specificity:特异度
判断没病且正确的次数总的没病的次数
这里先打断一下,说一下对于敏感度和特异度的理解,列了如下所示的一个表格:
· | 判断有病 | 判断没病 |
---|---|---|
其实有病 | a11 | a12 |
其实没病 | a21 | a22 |
那么按照我们之前所述的对敏感度和特异度的理解:
然后我们继续:
·Positive predictive value:这个之前确实没有接触过,查了一下比较专业的医学解释是阳性结果中真阳性的比率,也就是
a11a11+a21
·Negative predictive value:阴性预测值,类比阳性预测值的定义,我们不难猜测出它的计算方式
a22a12+a22
·Brier Score:
Brier分数的计算方式是
BS=1N∑t=1N(ft−ot)2
其中N是进行判断的次数, ft 是第t次判断为有的概率, ot 是第t次真实的结果,可以理解成判断结果与真实结果的平均距离吧~距离越小表明结果越好·AUC:Area Under roc Cure
这个概念可以是数据挖掘或者机器学习中较为重要的指标之一(甚至比accuracy还要更加重要一些),其字面意思就是在ROC曲线下面的面积,要说这个东西我们先来搞懂ROC是个啥:
![]()
上面这一幅图中的蓝线就是一条ROC曲线,它的横坐标是灵敏度,纵坐标是特异度,然后AUC就是蓝线下面这部分的面积。
注:有些说法也有用横坐标是伪阳性率,纵坐标是真阳性率,但是他们最后计算出来的AUC是一样的。这幅图的最终目标是想要达到右上角的点,也就是灵敏度和特异度都达到100%,但是这个目标显然是很困难,要灵敏度高必须牺牲一部分的特异度(可以通改变阈值改变这个判断),而AUC则可以将两个指标综合在一起,看到一个整体的效果。
实现AUC的计算
输入真实y和预测的prey,即可调用sklearn中的metrics进行计算,来自官网的代码如下:
import numpy as np
from sklearn import metrics
y = np.array([1,1,2,2])
pred = np.array([0.1,0.4,0.35,0.8])
fpr,tpr,thresholds = metrics.roc_curve(y,pred,pos_label=2)
metrics.auc(fpr,tpr)
其中的pos_label参数的意义是,这个pos_label的值被认为是阳性(有病),而其他值被认为是阴性(没病),然后pred给的是阳性的概率。
然后就以fpr为横坐标,以tpr为纵坐标画图就可以了。
注:注意python是以fpr和tpr,而我们之前所说是以敏感度和特异度来画