混淆矩阵,在无监督学习中被称为匹配矩阵(matching matrix),之所以叫混淆矩阵,是因为我们能够很容易从图表中看到分类器有没有将样本的类别给混淆了。
TP(True Positive) ---- 将正类预测为正类数(真阳性)
FN(False Negative) ---- 将正类预测为负类数(假阴性)
FP(False Positive) ---- 将负类预测为正类数(假阳性)
TN(True Negative) ---- 将负类预测为负类数(真阴性)
现在我们举个列子,并画出混淆矩阵表,假如宠物店有10只动物,其中6只狗,4只猫,现在有一个分类器将这10只动物进行分类,分类结果为5只狗,5只猫,那么我们画出分类结果混淆矩阵,并进行分析,如下(我们把狗作为正类):
通过混淆矩阵我们可以轻松算出
真实狗的数量(行数量相加)为6=5+1
分类得到狗的数量(列数量相加)为5=5+0
真实猫的数量为4=0+4
分类得到猫的数量为5=1+4
那么对于二分类问题来说,
准确率(accuracy)
: 反映分类器统对整个样本的判定能力,能将正的判定为正,负的判定为负
,公式如下:
准确率 a c c u r a c y = T P + T N ( T P + F N + F P + T N ) 准确率accuracy=\frac{TP + TN}{(TP+FN+FP+TN)} 准确率accuracy=(TP+FN+FP+TN)TP+TN
猫狗案例中:准确率accuracy=(TP+TN)/(TP+FN+FP+TN)=9/10
精确率(Precision)
:指的是所得数值与真实值之间的精确程度;预测正确的正例数占预测为正例总量的比率
,一般情况下,精确率越高,说明模型的效果越好。
精确率 p r e c i s i o n = T P ( T P + F P ) 精确率precision=\frac{TP}{(TP + FP)} 精确率precision=(TP+FP)TP
猫狗案例中:精确率Precision=TP/(TP+FP)=5/(5+1)=5/6
召回率(Recall)
:预测对的正例数占所有正例的比率
,一般情况下,Recall越高,说明有更多的正类样本被模型预测正确,模型的效果越好。
召回率 r e c a l l = T P ( T P + F N ) 召回率recall=\frac{TP}{(TP + FN)} 召回率recall=(TP+FN)TP
猫狗案例中:召回率recall=a/(a+b)=TP/(TP+FN)=5/(5+0)=1
F1是精确率和召回率的调和均值
,即:
2 F 1 = 1 P + 1 R \frac{2}{F_{1}} = \frac{1}{P} + \frac{1}{R} F12=P1+R1
F 1 = 2 T P 2 T P + F P + F N {F_{1}} = \frac{2TP}{2TP + FP + FN} F1=2TP+FP+FN2TP
AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是ROC(Receiver Operating Characteristic),翻译为接受者操作特性曲线
。也就是说ROC是一条曲线,AUC是一个面积值。
ROC曲线为 FPR 与 TPR 之间的关系曲线,这个组合以 FPR 对 TPR,即是以代价 (costs) 对收益 (benefits),显然收益越高,代价越低,模型的性能就越好。
F P R = F P ( F P + T N ) FPR=\frac{FP}{(FP + TN)} FPR=(FP+TN)FP
T P R = T P ( T P + F N ) TPR=\frac{TP}{(TP + FN)} TPR=(TP+FN)TP
举例说明:
如在医学诊断的主要任务是尽量把生病的人群都找出来,也就是TPR越高越好。而尽量降低没病误诊为有病的人数,也就是FPR越低越好。
不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的TPR应该会很高,但是FPR也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么TPR达到1,FPR也为1。
我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。
我们可以看出
左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对;
点A(TPR>FPR),医生A的判断大体是正确的;
中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;
下半平面的点C(TPR
上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到 ROC 曲线。
根据ROC曲线评估模型
a.若一个学习器的ROC曲线被另一个学习器的曲线完全包住,则后者优于前者。
b.若两个学习器的ROC曲线发生交叉,则可根据曲线下方的面积大小来比较,ROC曲线下方的面积为AUC(Area Under ROC Curve).
如上图,ROC曲线距离左上角越近分类器效果越好,我们可以知道分类器 4 效果最好, 分类器 1 效果最差。
那么怎样判断分类器 2 和分类器 3 呢?我们引入了下面要讲的 AUC。
AUC 值为 ROC 曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
AUC = 1,是完美分类器。
0.5 < AUC < 1,优于随机猜测。有预测价值。
AUC = 0.5,跟随机猜测一样(例:丢铜板),没有预测价值。
AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。
注:对于AUC小于 0.5 的模型,我们可以考虑取反(模型预测为positive,那我们就取negtive),这样就可以保证模型的性能不可能比随机猜测差。
AUC的物理意义:正样本的预测结果大于负样本的预测结果的概率。所以AUC反映的是分类器对样本的排序能力
。
另外值得注意的是,AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因。
举例解释AUC的含义:
小明一家四口,小明5岁,姐姐10岁,爸爸35岁,妈妈33岁建立一个逻辑回归分类器,来预测小明家人为成年人概率,假设分类器已经对小明的家人做过预测,得到每个人为成人的概率如下图所示。
小明 | 姐姐 | 妈妈 | 爸爸 | |
---|---|---|---|---|
a | 0.12 | 0.35 | 0.76 | 0.85 |
b | 0.12 | 0.35 | 0.44 | 0.49 |
c | 0.52 | 0.65 | 0.76 | 0.85 |
AUC只与概率的相对大小(概率排序)有关,和绝对大小没关系。由于三个模型概率排序的前两位都是未成年人(小明,姐姐),后两位都是成年人(妈妈,爸爸),因此三个模型的AUC都等于1。
AUC只关注正负样本之间的排序,并不关心正样本内部,或者负样本内部的排序。这也体现了AUC的本质:任意个正样本的概率都大于负样本的概率的能力。例子中AUC只需要保证(小明和姐姐)(爸爸和妈妈),小明和姐姐在前2个排序,爸爸和妈妈在后2个排序,而不会考虑小明和姐姐谁在前,或者爸爸和妈妈谁在前。
我们可以发现TPR只是正样本中预测正确的概率,在正样本内部进行,并没有牵扯到负样本。而FPR只是负样本中预测错误的概率,在负样本内部进行,并没有牵扯到正样本。
TPR和FPR的计算并没有涉及正负样本的互动(也就是没有跨行)。和正负样本的比例没有关系。因此 ROC 的值与实际的正负样本比例无关,因此既可以用于均衡问题,也可以用于非均衡问题。而 AUC 的几何意义为ROC曲线下的面积,因此也和实际的正负样本比例无关。
以上描述的都是评价标准的第一个角度,即:是否预测到了正确的数值。
对于回归类算法而言,只探索数据预测是否准确是不足够的。除了数据本身的数值大小之外,我们还希望我们的模型能够捕捉到数据的”规律“,比如数据的分布规律,单调性等等,而是否捕获了这些信息并无法使用MSE来衡量。比如,对数据进行回归,前端大部分预测的效果很好,但是后面部分的预测结果并不好,这样使用第一种角度考虑预测的结果,其实效果还很好,但是拟合的函数并没有准确的学习到数据的分布和走势。
故使用R2:确定系数,来从第二种角度来预测结果进行评价
其实“确定系数”是通过数据的变化来表征一个拟合的好坏。由上面的表达式可以知道“确定系数”的正常取值范围为[0 1],越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。
交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set)。首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。
交叉验证分为下面三种:
第一种是简单交叉验证,所谓的简单,是和其他交叉验证方法相对而言的。首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。
第二种是S折交叉验证(S-Folder Cross Validation)。和第一种方法不同,S折交叉验证会把样本数据随机的分成S份,每次随机的选择S-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择S-1份来训练数据。若干轮(小于S)之后,选择损失函数评估最优的模型和参数。
第三种是留一交叉验证(Leave-one-out Cross Validation),它是第二种情况的特例,此时S等于样本数N,这样对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,比如对于普通适中问题,N小于50时,可以采用留一交叉验证。