我们如何去判断一个算法是否是好的呢?
举一个例子,我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有0.5%的实例是恶性肿瘤,假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差也只有0.5%,但是我们都知道,这个其实没有任何意义。误差的大小不能视为评判算法效果的依据的。
我们把算法的预测结果分为四种情况
名称 | 简写 | 含义 |
---|---|---|
正确肯定 | true positive | 预测为真,实际为真 |
正确否定 | true negative | 预测为假,实际为假 |
错误肯定 | false positive | 预测为真,实际为假 |
错误否定 | false negative | 预测为假,实际为真 |
那么查准率 precision=TP/(TP+FP)
查全率 recall=TP/(TP+FN)
那么如何权衡这两个指标呢?那么我们就要设置不同的阈值,根据不同的阈值得到的两个指标。我们去计算F1score
计算公式为:
F1=2PR/(P+R)