《Machine Learning》第七讲 Precision and Recall

1. 设计流程

       在设计一个机器学习算法时,设计流程如下:
       首先从一个简单的算法开始,然后尽快地去实现这个算法并在验证集中去测试,最后再收集测试结果;
       第二步是根据前面学习到的模型,绘制学习曲线图,再分析曲线图来决策是过拟合的问题还是欠拟合的问题;
       第三步则是误差分析,人工的来检测你的学习算法在验证集中出现错误的样本,看看能不能发现某些系统性的规律(比如说在垃圾邮件分类系统中,看看能不能发现什么类型的邮件总是被错误分类);

       重复这个过程之后,每次都会发现一些这个系统的短处,然后去修正它,然后不断地提高这个系统的预测精度。

2.误差分析(Error Analysis)

《Machine Learning》第七讲 Precision and Recall

       上图给出了误差分析的步骤,比如在一个垃圾邮件分类系统中,我们学习到的算法,在500组数据的交叉验证集中,有100组发生了错误,于是我们来分析这些错误分类数据的类别,假如有12组为卖药类的邮件、4组为卖仿造品类的邮件、53组为钓鱼类的邮件,剩下的是其他的,那么我们应该主要研究钓鱼类的邮件,看看能不能构建更好的特征变量来区分钓鱼类的邮件;
       除了分析错误分类数据以外,我们还可以分析哪些特征向量在区分垃圾邮件时,划分效果比较好,比如说我们在交叉验证集中发现,垃圾邮件有5例是故意拼错、16例是不寻常的邮件路径,32例是不寻常的标点符号,那么说明标点符号可能是一个strong feature,也就是说我们要花功夫来构建基于标点符号的更复杂的特征变量。

3.算法评估

3.1 skewed(倾斜的) class (偏斜类)

《Machine Learning》第七讲 Precision and Recall

       举一个癌症分类的例子,训练出来一个逻辑回归模型,在测试集上的准确率高达 1%,那么我们能不能说我们学习到了一个很好的分类算法呢?显然不是这样的,假如我们的数据集中,实际上只有 0.5% 的人患有癌症,那么就算我们写一个算法,不管 x 是什么,总是输出 y = 0 ;那也能得到很高的正确率,因此,单凭一个预测率不足以说明我们算法的好坏,我们需要更多的参考因素。
       至于skewed class的定义,也就是像上面举的例子一样,如果数据集中,正样本与负样本比例严重失衡时,我们就称这个数据集是 skewed class。

3.2 precision and recall

《Machine Learning》第七讲 Precision and Recall

       precision(查准率):预测 positive为 true 占所有预测为positive的比例;以癌症为例,precision的意思就是预测患有癌症正确的个数与所有预测患有癌症个数的比;
       recall(召回率):预测 positive为 true 占所有实际上positive为 true 的比例;以癌症为例,recall 的意思就是预测患有癌症正确的个数与所有实际上患有癌症个数的比;
       因此,我们可以发现,如果预测率很高,但是召回率很低的话,那么这就不是一个好的学习算法,比如上面提到的癌症预测算法,一直令 y = 0,这样的做法就是 recall = 0 ;这样一来我们就不容易被算法高预测率低表象所欺骗;
       另外需要注意的是,我们一般是把样本比例较低的一类设为positive ,y = 1,防止被算法所欺骗;
       通过评估一个算法的预测率、查准率、召回率,我们就可以判断一个算法的好坏,我们希望找到的是高预测率、高查准率、高召回率的算法。

3.3 trade off precision and recall

《Machine Learning》第七讲 Precision and Recall

       trade off 一词有此消彼长的意思,或者权衡,我觉得翻译为此消彼长很合适。以图中预测肿瘤模型为例,我们本来设定的阈值为0.5,那么如果我们增大阈值,那么查准率就会增大,而召回率就会降低;如果我们减小阈值,那么查准率就会降低,而召回率就会增大。所以我说二者有一种此消彼长的关系。图中的曲线图就反映了这种趋势。


《Machine Learning》第七讲 Precision and Recall
       那么如何选择合适的查准率与召回率对应的算法呢,一般采用计算 F 值(F1 Score),公式在图中给出了,F值越大的算法,我们可以考虑采用。