在处理分类问题时,如果分类中数据出现严重的偏斜状况。模型的精确度将无法作为评价模型好坏的标准。这时需要通过查准率和召回率来处理这一问题。
假设处理一个二元分类问题:预测变量为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 $,故最优。