第六周:Machine learning system design

来源:互联网 发布:订机票 知乎 编辑:程序博客网 时间:2024/06/05 08:36

做项目的推荐方法

  1. 迅速地用一个简单的算法来实现这个项目,不必特别精细,并在交叉验证集上测试。
  2. 画出学习曲线,判断是否需要更多的数据,或者更多的特征值还是多项式等等。
  3. 之后就是误差分析了,需要我们人工地去检查那些犯错的样例,发现这些样例有哪些共同的性质。

评估算法好坏

我们以癌症患者分类器为例,比如说癌症患者在训练集的比例是0.5%,那如果我的机器学习算法直接预测所有的人都不是癌症患者,那么我的算法冒无疑问在测试集上依旧可以取得很好的精度,因为患癌症的人毕竟是少数,可是这个算法得出的结果未免太过荒谬了。这个就是偏斜类(skewed class)问题了。这就告诉我们之前评估算法好坏的方法并不靠谱,我们需要其他的评估方法来测量我们算法的好坏。

度量算法好坏的术语

这里写图片描述
我们设total_examples = TP+FP+FN+TN, 也就是样例总数。

精度

顾名思义,是指我们的算法预测对的比例。
精度(accuracy) = (TP + TN) / total_examples 

(这里的TP,TN在上图找)

查准率(准确率,说实话我感觉准确率这个词让我感觉蛮像精度的,不过这是西瓜书上的,所以我们还是区分一下精度和准确率吧。)

在所有预测为positive的样例里,真正是positive的比例。以癌症患者分类器为例,也就是预测为癌症患者的人中,真的是癌症患者的比例。
查准率(precision) = TP / (TP + FP)

查全率(召回率)

对于真正是positive的样例,被预测成positive的比例。还是癌症患者分类器为例,癌症患者被查出来的比例。
查全率(recall) = TP / (TP + FN)

查准率,查全率的比较

还是以癌症患者为例,我们希望癌症患者尽量地被查出来,也就是查全率比较高,相反地,对于查准率就比较低了。
同样地,我们也希望不要有非癌症患者被我们预测成癌症患者,造成不必要的损失,也就是查准率比较高,相反地,查全率就比较低了。
那么我们到底是要查全率高,还是要查准率高?那么得要看你需要的到底是什么了。
一般地,查准率变高,查全率会变低,或者相反的情况。我想,除非是你的假设非常接近真实模型,查准率和查全率都非常接近1的情况。

如何调整查全率和查准率

比如在逻辑回归问题中
这里写图片描述
我们通常是threshold设置成0.5,可是如果我们需要较高的查准率,可以将threshold设置高一点,如果需要较高的查全率,那么将threshold设置低一点。

综合查准率和查全率的选择

我们通常希望二者都比较高,可是一般来说,一个变大,另一个就会变小,有没有另一种度量标准?
我们首先会想到二者的平均值可以吗?可是联想到偏斜类的问题,这个方案直接毙掉。
还有一种方法就是利用调和平均算出来的F值(调和平均,有兴趣的同学自行搜一下吧,很简单的一个公式)。

F = 2*(P*R / (R+P))

有了F值,我们就可以有一个比较好的度量方式了。

0 0