如上图示,假如我们在构建一个喵咪分类器,数据集就是上面几个图,训练之后准确率达到90%。虽然看起来挺高的,但是这显然并不具一般性,因为数据集太少了。那么此时可以想到的ML策略有哪些呢?总结如下:
正交这个词很好理解,即各个变量之间是相互独立的,以像我这样的小萌新学开车为例,主要起作用的是方向盘(控制方向)和油门&刹车(控制车速),为了拿到驾照我需要练习倒车入库等操作,在最开始学车时我可能就是在倒车时先减速停下来,然后转动方向盘,再踩个油门……慢慢的一步一步的挪进车库。而对于老司机来说可能就是一边加速一边转动方向盘,轻轻松松的就完成了入库操作,但是其操作难度却大大增加。
好了说了这么多可能听起来一头雾水,但是如果联系到实际的模型调参就好懂了。在调参数时我们也希望尽 可能的正交化,尤其是像我这样的刚入门的白菜,切勿将一大堆的优化方法不动脑的就堆在一起使用。
本节大致的思想就是首先按照单一数字评估指标对模型进行评价和优化。以精确率和召回率为例,这二者一般来说是一个不可兼得的指标,所以为了更好的衡量模型的好坏,引入F1算法来综合精确率和召回率对模型进行评估。
更加具体的介绍可查看Andrew Ng机器学习课程笔记--week6(精度&召回率)
假如我们有A,B,C三个分类器,各个分类器的准确率和耗时情况如下:
分类器 | 准确率 | 耗时 |
---|---|---|
A | 90% | 80ms |
B | 92% | 95ms |
C | 95% | 1500ms |
此时该如何评价这三个分类器呢?
有如下可选择的方法:
cost = accuracy - β*time
假设我们有一系列的数据分别来自上面各个国家和地区。现在我们需要将这些数据划分为开发集和测试集, 一般的方法是我们随机选择几个国家的作为开发集,剩下的作为测试集,就如上图所示。
看起来没毛病是不是?但是毛病大大的!!!因为开发集和测试集不服从同一分布,这就好像你在准备托福考试,你尽可能的得到了所有的考试技巧和其他资料,最后你的确得到了不错的成绩。但是后来因为工作需求需要你会说俄语,此时如果你用之前托福的资料来对付俄语考试则显得驴头不对马嘴了,这也就是为什么可能开发集准确率挺好的,但是应用的测试集就不行了。
所以为了实现服从同一分布,我们可以这样做,
这一节的内容可参考我之前的笔记训练/测试集数据大小问题
按照吴大大的惯例还是先举个栗子比较好理解:
假设现在一个公司在做一个喵咪图片推送服务(即给用户推送喵咪的照片),部署的有两个算法:
所以对于公司来说可能希望准确性高一些的算法A,而用户可能会非常在意你给他推送了某些不想看的东西,也许更喜欢算法B。所以总的来说就是根据实际需要来改变开发/测试集合指标。
如图示:
其中紫色曲线在末尾收敛后与绿色虚线之间的差距称为贝叶斯优化误差(Bayse Optima Error)
官网提供的更清晰的课件图示:
因此在实际操作过程中,我们可以以人类准确率为指标来评判我们训练的模型好坏程度,如果准确率不及人类,那么我们可以从以下几个方面进行调整:
看上面课件的截图可能比我自己重新复述一遍要更加容易理解一些,不过我还需要对上面的课件做一些补充,就是
具体怎么运用看下面一小节内容~
有了课件后我都懒得自己写了(捂脸(/ω\))
还是解释一下课件吧:
假如一个医院需要对一个医学影像进行分类识别,普通人,普通医生,有经验的医生和一群有经验的医生识别错误率分别为3%,1%,0.7%,0.5%。上一节中提到过Human Error,那此时的该如何确定Human Error呢?你可能会说取平均值,只能说Too Naive!当然是取最好的结果啦,也就是由一群经验丰富的医生组成的团体得到的结果作为Human Error。另外贝叶斯误差一定小于0.5%。
还是以医学影像分类识别为例,假如现在分成了三种情况: