机器学习模型评估中的常用指标

一个比较推荐的解决机器学习问题的步骤是:首先以一个简易的算法开始,快速的进行实现,并在交叉验证集上进行验证;然后画出它的学习曲线,通过学习曲线确定是否更多的数据或者更多的特征会对模型的优化有帮助。接着人为地检测交叉验证集中被错误的进行分类的或者预测的样本的共同特征,从实际入手对模型进行调整,即Error Analysis,不断调整并验证在交叉验证集上的误差,寻找最优的结果,优化模型。

在机器学习中,当完成了一个模型的训练后,如何对当前模型的优劣程度做一个评估呢?下面就需要一些业界公认的指标来对模型进行评估。

首先从一个例子开始:对于一个分布非常不均匀的数据集(skewed class),比如正样本(y=1)占比为1%,负样本(y=0)占比为99%,如果此时采用正确率来进行模型优劣的估计,那么如果采用比如逻辑回归等常见分类算法,可能达到98%的正确率。但是如果设计一个“模型”,始终预测结果为负样本,那么这个模型的正确率能够达到99%,从这个指标来看它甚至比经过机器学习算法学习得到的模型表现还好。但是一个显而易见的事实是这个简单的“模型”在测试集上具有非常不佳的表现,因为它本质上并没有进行预测。因此需要别的一些参数来进行模型评估。

下图是常见指标组成的混淆矩阵,其中Actual class代表样本实际应该所处的分类,Predicted class代表模型预测的结果。

机器学习模型评估中的常用指标

根据上面的混淆矩阵,有了下面几个指标的定义:

Precision = (True Positive)/(True Positive + False Positive)

Recall = (True Positive)/(True Positive + False Negative)

F1 score = 2 * (Precision * Recall)/(Precision + Recall)

Precision和Recall二者都很高,则表明这个模型非常好。需要注意的是,对于一个分类模型往往我们都会设置一个阈值threshold;大于这个阈值分类为正样本,小于这个阈值分类为负样本,阈值的确定往往也对应着不同的Precision和Recall。一般来说默认的阈值我0.5,当我们降低threshold时,Precision会变小,Recall会变大;当增大threshold时,Precision会变大,Recall会变小。那么应该如何权衡一个最优的Precision和Recall,来作为最优的模型指标呢?

这时引入了F1 score这个指标,它的公式如上面所示,当Precision或者Recall都非常小的时候,F1 score都会非常小,只有当Precision和Recall都为一个比较高的水平的时候,才可以得到一个比较高的F1 score。