在处理分类问题时,如果分类中数据出现严重的偏斜状况。模型的精确度将无法作为评价模型好坏的标准。这时需要通过查准率和召回率来处理这一问题。

假设处理一个二元分类问题:预测变量为y=1(得了癌症),y=0(没有得癌症)。在样本数据中y=0得数据非常少。假设我们通过逻辑回归得到一个分类,模型有95%的精度。是不是说这个模型很好呢?

未必。现在我们设想总是预测y=0,这不是一个机器学习算法,但是我们会得到比上面逻辑回归更高的精确度。

actual(1) actual(0)
predicted_positive(1) True Positive(TP) False Positive(FP)
predicted_negative(0) False Negative(FN) True Negative(TN)

上面的表格中,提到了四个概念。

  • TP(真阳性) 预测为真实际为真的数量。
  • FP(假阳性) 预测为真实际为假的数量。
  • FN(假阴性) 预测为假实际为真的数量。
  • TN(真阴性) 预测为假实际为假的数量。
查准率:Precision = TP/(TP + FP)

召回率:Recall = TP/(TP + FN)

查准率的分母表示的意义是:所有预测得癌症的样本数,即all predicted_positive(1);召回率的分母表示的意义是:事实上所有得了癌症的样本数,即 all actual_positive(1)。

一般来说模型的查准率高了,召回率就会降低,查准率降低了,召回率就会升高。

应用在是否得癌症这个问题来说:

actual(1) actual(0)
predicted_positive(1) 真有癌症 假有癌,事实没病
predicted_negative(0) 假没病,事实得了癌症 真没有癌症

将临界值设置为0.7有较高的查准率,有较高的可能性他们真的得了癌症;与之相反这个回归模型有较低的召回率,因为我们做预测的时候只给一小部分病人预测y = 1。

临界值设置为0.9查准率更高,召回率更低。

将临界值设置为0.3,没有得癌症的人也会被预测得了癌症,准确率下降了,召回率增高了,这样没有得癌症的人可以进行有效的检查和治疗,因为确实患有癌症的人有很大一部分被我们标识出来了。

那么如何在查准率和召回率中做取舍呢?可以计算$ F_1 SCORE $

$$ F_1 SCORE = \frac {2(P * R)}{(P + R)} $$

precision(p) recall(R) F score
algorithm 1 0.5 0.4 0.444
algorithm 2 0.7 0.1 0.175
algorithm 3 0.02 1 0.0392

如在上述表格中,模型1拥有较高的$ F_1 SCORE $,故最优。