机器学习中的评价指标
分类指标
Confusion Matrix
一个2×2的矩阵(混淆矩阵):
评估指标/confusion_matrix.png)
Accuracy
Accuracy 称为“精度”。
正确分类样本数除以总样本数:
评估指标/accuracy.png)
accuracy并不适用于所有情况,引申出Precision和Recall。
Precision
Precision 称为“准确率、查准率”。
在垃圾邮件分类例子中:
评估指标/precision.png)
Recall
Recall 称为“召回率、查全率”。
在医疗模型中,召回率很重要:
评估指标/recall.png)
summary
评估指标/confusion_matrix_2.png)
$$
\begin{align}
{\boldsymbol{Accuracy}} &= \dfrac{\text{True positives + True negatives}}{\text{Total examples}} \\
{\boldsymbol{Precision}} &= \dfrac{\text{True positives}}{\text{predicted as positive}} = \dfrac{\text{True positives}}{\text{True positives + False positives}} \\
{\boldsymbol{Recall}} &= \dfrac{\text{True positives}}{\text{actual positives}} = \dfrac{\text{True positives}}{\text{True positives + False negatives}}
\end{align}
$$
如果拥有高的precision和recall,肯定是一个好的分类模型。
由于垃圾邮件模型和医疗模型的侧重点不一样,所以我们希望垃圾邮件分类模型有更高的Precision,医疗模型有更高的Recall。
$F_1$ score
一般来说,Precision 和 Recall 总是一个大一个小。
总体衡量 Precision 和 Recall,有较多的计算方法,F值(F1值)是其中一个:
$$
\text{F1 Score} = 2*\dfrac{\text{Precision∗Recall}}{\text{Precision+Recall}}
$$
F1 score是一个harmonic mean(调和平均数):
评估指标/harmonic_mean.png)
只有算法的 Recall 和 Precision 都要接近于1,才能得到一个很高的F1值 。 如果Recall = 0或者 Precision = 0 ,,1值也会等于0 .
$F_\beta$ score
在$F_1$ score中,Precision和Recall有同等地位,但更实际的情况是我们更侧重两者中的一个(垃圾邮件分类模型要求更高的Precision,医疗模型要求更高的Recall):
评估指标/f_beta_score.png)
评估指标/f_beta_limit.png)
所以,当$\beta$越小,$F_\beta$ score越趋向于Precision,当$\beta$越大,$F_\beta$ score越趋向于Recall。
多混淆矩阵
当进行多次训练/测试,得到多个混淆矩阵;或在多个数据集上进行训练/测试,希望估计算法的全局性能。希望在n个二分类混淆矩阵上综合考察准确率和查全率,一般有如下两种方法。
macro
在各混淆矩阵上分别计算 Precision 和 Recall,再计算二者平均值 macro-P 和 macro-R,称为“宏查准率”和“宏查全率”,还可以通过 macro-P 和 macro-R 计算“宏 $F_1$”(macro-$F_1$)。
micro
现将各混淆矩阵的对应元素进行平均,得到平均混淆矩阵,再根据此矩阵求“微查准率”(micro-P)、“查全率”(micro-R)和“微 $F_1$”(micro-$F_1$)。
ROC
Receiver Operating Characteristic (ROC) curve —— 受试者工作特征曲线。
三个分类的例子(完美、较好、差(随机分)),中间的竖线是分类阈值:
评估指标/3_situations.png)
对于一个较好的分类情况,计算下图中的两个数值:
评估指标/two_axis.png)
现在,移动我们的分界点(分类阈值),重复计算这两个数值:
评估指标/split_points.png)
这样就得到很多组数据,将其理解为二维平面上(横轴为false positive rate,纵轴为true positive rate,计算方法见上图)的坐标点,画图,即可得到ROC曲线:
评估指标/draw_ROC.png)
面积约为0.8
对其他两个例子用同样的方法可求得ROC曲线:
评估指标/AUC.png)
面积越接近于1,模型越好。
一次分类结果只能作为平面上的一个点,通过调整这个分类器分类时候使用的阈值,就可以得到ROC曲线。曲线距离左上角越近(哪种阈值效果都很好),证明分类器效果越好。
ROC曲线有个很好的特性:在实际的数据集中经常会出现样本类不平衡,即正负样本比例差距较大,而且测试数据中的正负样本也可能随着时间变化,这时Precision-Recall曲线变化较大,ROC曲线能够保持不变。
虽然,用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。于是Area Under roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的performance。
AUC
AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
AUC值的物理意义
假设分类器的输出是样本属于正类的socre(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。
回归指标
Mean Absolute Error
MAE - 平均绝对误差,用sklearn实现:
评估指标/MAE.png)
MAE含有绝对值,不方便求导(反向传播),引出均方误差MSE。
Mean Squared Error
MSE-均方误差,用sklearn实现:
评估指标/MSE.png)
注意右边的图,实际上表示小块面积。
R2 Score
将现有模型与最简单的可能模型进行误差相比。
假设现有模型是线性回归模型(右上),简单模型是右下,水平直线(均值),用1减去他们的误差比值,得到R2 Score:
评估指标/R2_score.png)
评价R2 Score:
评估指标/judge_R2.png)
R2值越高,我们的模型越好。
在sklearn中使用:
评估指标/r2_sklearn.png)