目录
使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微妙的影响,这件重要的事情就是偏斜类(skewed classes)的问题。类偏斜情况表现为我们的训练集中有非常多的同一种类的样本,只有很少或没有其他类的样本。 例如我们希望用算法来预测癌症是否是恶性的,在我们的训练集中,只有0.5%的实例是恶性肿瘤。假设我们编写一个非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有0.5%。然而我们通过训练而得到的神经网络算法却有1%的误差。这时,误差的大小是不能视为评判算法效果的依据的。
精确率和召回率的计算方式:
查准率(Precision)和召回率(Recall,又叫查全率) 我们将算法预测的结果分成四种情况:
正确肯定(True Positive,TP):预测为真,实际为真
正确否定(True Negative,TN):预测为假,实际为假
错误肯定(False Positive,FP):预测为真,实际为假
错误否定(False Negative,FN):预测为假,实际为真
则:查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。 召回率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比,越高越好。 这样,对于我们刚才那个总是预测病人肿瘤为良性的算法,其召回率是0(因为总是预测病人是良性的话,即预测输出为0,所以召回率的分子肯定为0,所以召回率为0)。
当召回率是0的时候,那么说明这个模型没有在做有用的预测。
高精度意味着诊断一个病人可能患有这种罕见病并且这是一个准确的判断。
高召回率意味着一个病人确实患有这种罕见病,并且算法能正确的识别出他确实患有罕见病。
精确率和召回率两者是此起彼伏的关系,因为如果精确率高,即预测时的阈值设置得高,假如阈值设置为0.9,大于0.9时才认为这个病人患病,那么检测出来这个病人真正患病的要求就很高,意味着就会有更多的真正的患病的人被检测不出来(预测概率小于0.9),又因为很多真正患病的人没被检测出来,所以true positive就会变小,所以召回率就会小,所以精确率和召回率就是这个大,那个就小的关系。可以看下图:
还有一种叫做F1 score 的东西,计算方法如下图,现在有三个算法,精准率和召回率已经知道了,然后计算F1 score分数,往往选择F1 score 分数高的那个算法。F1 score的值贴近精确率和召回率中更低的那个。