白话机器学习1:分类问题中的评价指标

时间:2024-05-02 13:58:04

        机器学习中的评价指标非常多,它们用来衡量模型的性能和预测能力。不同类型的机器学习任务可能需要不同的评价指标。以下是一些常见的评价指标,按照不同类型的机器学习任务分类:

对于分类问题:

  1. 准确率(Accuracy)
  2. 精确率(Precision)
  3. 召回率(Recall)或灵敏度(Sensitivity)
  4. F1分数(F1 Score):精确率和召回率的调和平均
  5. 受试者工作特征曲线(ROC Curve)下方的面积(AUC-ROC)
  6. 预测概率的对数损失(Log Loss)
  7. 混淆矩阵(Confusion Matrix)
  8. Matthews相关系数(MCC)
  9. 汉明损失(Hamming Loss)
  10. Jaccard相似系数

对于回归问题:

  1. 均方误差(Mean Squared Error, MSE)
  2. 均方根误差(Root Mean Squared Error, RMSE)
  3. 平均绝对误差(Mean Absolute Error, MAE)
  4. 平均绝对百分比误差(Mean Absolute Percentage Error, MAPE)
  5. R平方(R²)或决定系数

对于聚类问题:

  1. 轮廓系数(Silhouette Coefficient)
  2. 戴维森堡丁指数(Davies-Bouldin Index)
  3. Calinski-Harabasz指数
  4. Dunn指数

对于排名问题:

  1. 平均精度均值(Mean Average Precision, MAP)
  2. 规范化折扣累计增益(Normalized Discounted Cumulative Gain, NDCG)

对于异常检测:

  1. 命中率(Hit Rate)
  2. 假阳性率(False Positive Rate)

对于推荐系统:

  1. 准确率@K(Precision@K)
  2. 召回率@K(Recall@K)
  3. 覆盖率(Coverage)

        接下来我就举一个简单的例子,来给出分类问题中的评价指标的直观理解。

一、分类问题中的评价指标

        我们使用一台机器或一个模型,它的任务就是从一堆水果中找出所有的苹果。

  1. 准确率(Accuracy): 这就是我们模型做得有多好的整体打分。如果模型选择了100个水果,其中90个确实是苹果,那么准确率就是90%。                                           Accuracy = \frac{TP}{TP + FP}                                                                                                             其中TP是真正例(True Positives,即正确识别的苹果)的数量,而FP是假正例(False Positives,即错误识别为苹果的其他水果)的数量。

  2. 精确率(Precision): 当模型声称找到了一个苹果时,它是对的有多少次?如果模型选了50个水果说是苹果,但其中只有40个是真的苹果,那么精确率就是80%。

      3.召回率(Recall)或灵敏度(Sensitivity): 在所有的苹果中,模型找到了多少?如果有100个苹果,模型只找到了80个,那么召回率就是80%。

         Recall = \frac{TP}{TP + FN}        

        其中FN是假负例(False Negatives,即错过的苹果)的数量。

     4.F1分数(F1 Score): 这个分数试图同时考虑精确率和召回率,给出一个平衡的分数。如果精确率和召回率都很高,F1分数就会很高。所以它是精确率和召回率的一种平衡。它告诉我们机器在同时不错过任何一个真苹果(召回率高)和不错误地把其他水果当作苹果(精确率高)方面表现如何。想象一下,如果你的机器挑出了很多水果说它们是苹果(以增加它找到真苹果的机会,从而提高召回率),但其实其中很多都不是苹果,它的精确率就会很低。反过来,如果机器非常小心,只有在100%确定的时候才会选择一个水果并说它是苹果,那么它可能会错过很多真正的苹果,这样召回率就低了。                                                                                                                F1-Score计算式是精确率和召回率的调和平均数:F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}

          5.受试者工作特征曲线(ROC Curve)下方的面积(AUC-ROC): 这是用来衡量模型分辨正类和负类的能力。AUC-ROC是一个介于0和1之间的数,这个数越接近1,表示模型的性能越好。

            这个找苹果的机器有一个特殊的功能,我们可以调节它的灵敏度:调高灵敏度,它会更有可能把一个水果识别为苹果,但这样也可能会把一些不是苹果的水果错认为是苹果(比如橘子);调低灵敏度,它就变得更加谨慎,只有非常确定的时候才会说这是一个苹果,这样它可能就会错过一些真正的苹果。

        现在,受试者工作特征曲线(ROC Curve)就像是一个记录本,记录了在我们不断调整机器灵敏度时,机器找出真正苹果和错误标记苹果的能力。每次调整,我们都记录下两件事情:真正例率(True Positive Rate,TPR):机器正确识别为苹果的水果占所有真正的苹果的比率。假正例率(False Positive Rate,FPR):机器错误地把非苹果识别为苹果的情况占所有实际上非苹果水果的比率。

     6.预测概率的对数损失(Log Loss): 预测概率的对数损失(也称为逻辑损失或交叉熵损失)是一个衡量模型预测不确定性的分数。这个分数越低,表示模型越有信心它的预测是正确的,即模型的预测越准确。

        我们模型的任务是从一堆水果中识别出苹果。这是一个二分类问题,其中一个类别是苹果(我们可以标记为1),另一个类别是非苹果(我们可以标记为0)。

        对于二分类问题,对数损失函数定义如下:

        对于给定的真实标签y_i (其中y_i  是0或1)和模型预测该类别的概率\hat{y}_i(即模型预测为苹果的概率),对数损失的计算公式为:

      L(y_i, \hat{y}_i) = -\left( y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right) 

        其中L(y_i, \hat{y}_i) 是单个样本的对数损失。如果我们有 N 个样本,那么整体的对数损失为这些单个损失的平均值:

      \text{Log Loss} = -\frac{1}{N} \sum_{i=1}^{N} \left( y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right) 

这个公式考虑了两种情况:

  1. 真实标签 y_i为1时,我们关心的是\log(\hat{y}_i)的值。如果模型预测\hat{y}_i接近1,那么 (\log(\hat{y}_i)) 接近0,损失较小;如果\hat{y}_i接近0,那么\log(\hat{y}_i) 会变得很小(负的很大),导致损失增大。

  2. 真实标签 y_i为0时,我们关心的是\log(1 - \hat{y}_i) 的值。如果模型预测 \hat{y}_i接近0,那么\log(1 - \hat{y}_i)  接近0,损失较小;如果 \hat{y}_i接近1,那么\log(1 - \hat{y}_i)会变得很小(负的很大),导致损失增大。

        因此,对数损失惩罚那些正确类别的预测置信度低的情况。对于一个完美的模型,它对真实类别的预测概率将总是1,所以对数损失将是0。请注意,因为对数函数的定义域是(0,1) ,预测概率 \hat{y}_i必须在这个范围内,不能是0或1,否则会导致对数计算为无穷大,即\log(0) = -\infty

在实践中,模型可能会对包含苹果的图片给出一个概率(比如说0.8),而对不包含的图片给出另一个概率(比如说0.1)。对数损失就是用来衡量这些概率预测的准确性。

     7.混淆矩阵(Confusion Matrix): 是一个用来显示模型预测正确和预测错误的次数的表格。它可以帮助我们详细了解模型在哪些方面做得好,在哪些方面做得不好。

        还是以找苹果的二分类问题:苹果(正类)和非苹果(负类)。在这种情况下,混淆矩阵可以被定义为4个部分:

  1. 真正类(True Positives, TP):模型正确预测为苹果的苹果数量。
  2. 假正类(False Positives, FP):模型错误预测为苹果的非苹果数量。
  3. 真负类(True Negatives, TN):模型正确预测为非苹果的非苹果数量。
  4. 假负类(False Negatives, FN):模型错误预测为非苹果的苹果数量。

这四个部分可以在一个2x2的矩阵中展示,如下所示:

真实 / 预测 苹果(正类) 非苹果(负类)
苹果(正类) TP FN
非苹果(负类) FP TN

通过混淆矩阵,我们可以计算出多种性能指标,如精确率、召回率和F1分数等:

  • 精确率(Precision)是指在所有模型预测为苹果的情况中,实际上是苹果的比例,公式为:Precision = \frac{TP}{TP + FP}
  • 召回率(Recall)是指在所有实际为苹果的情况中,被模型正确预测为苹果的比例,公式为:Recall = \frac{TP}{TP + FN}
  • F1分数(F1 Score)是精确率和召回率的调和平均值,用于在一个指标中同时考虑精确率和召回率,公式为:F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}

     8.Matthews相关系数(MCC): 这是一个介于-1和1之间的数,用来衡量你的模型的性能。如果是1,表示完美的预测;如果是0,表示不好也不坏,基本上和随机猜测没什么区别;如果是-1,表示预测完全相反。

        从一堆水果中找出所有的苹果,我们可以使用MCC来评估模型识别苹果(正类)和非苹果(负类)的能力。

MCC的计算公式为:\text{MCC} = \frac{(TP \times TN) - (FP \times FN)}{\sqrt{(TP + FP)(TP + FN)(TN + FP)(TN + FN)}}

        这个公式通过考虑所有的预测结果(包括正类和负类的正确与错误预测),来提供一个综合的性能衡量。由于MCC同时考虑了预测的四个方面,即使在数据集不平衡的情况下,它也能提供一个公正而有用的性能评估。

        在大量的水果中(其中苹果只占很小一部分)表现出高准确率,这可能只是因为它总是预测最常见的类别(即非苹果)。在这种情况下,准确率可能会误导我们认为模型表现良好,但MCC将提供一个更真实的性能指标,清楚地显示模型在识别少数类(苹果)方面的实际能力。

     9.汉明损失(Hamming Loss): 这个指标用来测量预测错误的标签的比例。比如,如果一个水果应该被标记为苹果而被错误地标记为橘子,这就会计入汉明损失。

        我们将每个水果的预测(是否被识别为苹果)看作一个标签,那么汉明损失就可以用来衡量模型在这个任务上的平均错误率。

汉明损失的计算公式如下:

\text{Hamming Loss} = \frac{1}{N} \sum_{i=1}^{N} \frac{xor(y_i, \hat{y}_i)}{L}

其中:

  • N 是数据集中样本的总数。
  • L 是每个样本的标签数量,在我们的例子中,由于我们只关心是否为苹果,每个样本的标签数量为1。
  • y_i 是第i个样本的真实标签。
  • \hat{y}_i是第(i)个样本的预测标签。
  • xor(y_i, \hat{y}_i) 是一个逐位异或操作,用来计算每个样本的真实标签和预测标签之间的不一致标签数量。在二分类问题中,如果预测正确,(xor)的结果为0;如果预测错误,结果为1。

由于在我们的例子中,每个样本的标签数量(L=1),汉明损失简化为样本预测错误的比例:

\text{Hamming Loss} = \frac{1}{N} \sum_{i=1}^{N} xor(y_i, \hat{y}_i)

        这意味着,如果所有的水果都被准确地识别(苹果被识别为苹果,非苹果被识别为非苹果),那么汉明损失为0,这是理想情况。如果有错误的预测(比如,苹果被错误地标记为非苹果,或者非苹果被错误地标记为苹果),汉明损失会增加。汉明损失越低,模型的性能就越好。

     10.Jaccard相似系数: 这个指标衡量的是预测正确的正例在所有被预测和实际为正例的集合中所占的比例。简单地说,就是模型找到的真正的苹果和实际上的苹果有多相似。

        使用Jaccard相似系数可以帮助我们评估模型将苹果从其他水果中分离出来的效果。具体来说,我们可以将模型识别为苹果的水果集合与实际为苹果的水果集合进行比较。

Jaccard相似系数的计算公式是:J(A, B) = \frac{|A \cap B|}{|A \cup B|}

其中:

  • A 是第一个集合,在我们的例子中,它代表模型识别为苹果的水果集合。
  • B 是第二个集合,在我们的例子中,它代表实际为苹果的水果集合。
  • |A \cap B|表示集合A和B的交集的元素数量,即正确识别为苹果的数量。
  • |A \cup B|表示集合A和B的并集的元素数量,即模型识别为苹果的数量加上错过的苹果数量。

例如,如果有10个苹果和90个其他水果,模型识别出了8个苹果,并且其中有7个是真正的苹果(一个是错误识别的),则:

  • A(模型识别为苹果的集合)包含8个元素。
  • B(实际为苹果的集合)包含10个元素。
  • A \cap B(正确识别为苹果的集合)包含7个元素。
  • A \cup B(被识别为苹果的集合加上未被识别的真苹果的集合)包含11个元素(因为有一个非苹果被错误地识别为苹果)。

因此,Jaccard相似系数为:J(A, B) = \frac{7}{11} \approx 0.636

这个值反映了模型在区分苹果和非苹果水果方面的效果。Jaccard相似系数越接近1,表示模型的性能越好;相似系数越低,表示模型的性能越差。