本文是吴恩达《机器学习》视频笔记第68篇,对应第6周第10个视频。
“Machine Learning System Design:——Error metrics for skewed classes”
前面两个小节讲了怎样快速用简单算法将流程跑通,给出了基本的误差分析方法。这一节讲偏斜类问题。
所谓的偏斜类(Skewed Class)的问题,对于二元分类来说,其实就是一种分类的数据量远远大于另外一种分类。
以是否恶性肿瘤(癌症)的分类为例,我们希望能根据病人的一些特征判断病人是否患有癌症(y=1表示有癌症,y=0表示没有癌症)。
我们用逻辑回归算法来解决问题,发现在测试集有99%的正确率,这个结果看上去很完美。但是,你要知道患有癌症的毕竟是少数,可能在我们的测试集中只有0.5%的人真的患有癌症。
这样的话,你就知道我们的算法有多离谱了。因为,如果我们不管三七二十一全部给预测为y=0(没有癌症),那也只有0.5%的错误。
像上面这种某一种分类占比特别大的情况,被称为偏斜类。很明显,对于偏斜类的误差度量需要优化。
前面癌症判断那个例子中,假如我们采用了一些办法将算法从99.2%的准确率提升到99.5%的准确率,那我们对算法的这些改进是否有效呢?这是比较难判断的。
当我们遇到偏斜类时,经常使用查准率(Precision)和召回率(recall)的概念。这两个概念适用于二分类问题。
对于一个二分类问题,预测结果和实际结果有四种组合。
T开头表示预测正确(本来为真、预测为真TP;本来为假、预测为假TN),F开头表示预测错误(本来为假,预测为真FP,本例为真,预测为假FN)。
查准率Precision的意思是,TP/(TP+FP)。就是你所有预测为真那些样本中,预测正确的样本的占比。癌症那个例子就是,算法认为的所有癌症患者中真正的癌症患者占比是多少。查准率越高越好。
召回率Recall的意思是,TP/(TP+FN)。这个意思是,你预测为真并且正确的数量在实际为真的数量中的占比。癌症的那个例子就是,实际患有癌症的患者被算法成功筛查出来的比例。召回率当然是越高越好。
回到前面的例子再来看看,如果我们不管三七二十一,都认为患者没有癌症,准确率99.5%。那这样做的召回率就是0,当然这个算法就毫无意义了。
这样,如果一个算法同时有较好的查准率和召回率,那这个算法就还是不错的。注意:使用查准率和召回率的时候,我们让那个出现比较少的情况为1(y=1出现较少)。