ng的ml-003中11_XI._Machine_Learning_System_Design第二个视频中着重说明了如何开始设计系统:
首先需要以最快速的做一个你当前能力能够做到的系统:
然后画出learning curve,来查找是过拟合还是欠拟合,然后进行下一步,但是很多时候我们发现我们需要手动的去观察最后到底是哪些样本上分类错误了,这时候需要错误分析(这节主要说的就是这个)
上图中这个例子并不重要,是关于分类是否是垃圾文件的,但是里面有说在 后面可以将定义的不同类别上分类的错误个数进行显示出来(就是这个思想,主要是将模型在每个类上的错误分类个数求出来),这样我们就知道着重的将模型倾向于那个错误个数较多的类来进行下一步的修改,这里体现出对错误分析中的错误量化的思想;
ng的ml-003中11_XI._Machine_Learning_System_Design的第三个视频03_Error_Metrics_for_Skewed_Classes,给出了精确度和召回的定义;
这两个定义是用来衡量一个分类器的好坏的,高精度和高的召回率,说明了你的分类器很好,而对于那些有着skewed class 的数据集来说,简单的靠准确度是无法衡量的。而且下文中y=1,一般用在skewed class上,因为习惯将y=1表示异常类,即那些很少数的类的样本。
如图,左边为对于一个样本集合,其中是得癌症和未得癌症的,但是健康的人很多,不健康的实际只占了0.5%,这导致一种类型和另一种类完全不平衡,这种0.5%的数据类叫做skewed class。这时候假设你的模型的正确率已经到了99.2%或者99.5%(很好),那么就无法通过在validation或者test集上的表现来进行进一步的调整模型,那么需要一种新的量化方法,比如single real number evaluation metric。由此得出两种定义,精度(precision)和召回(recall),在这里精度就是那些我们通过模型得到的y=1(即异常类等中),实际的得癌症的多少人,就是图中的一样(测试正确的真正的y=1的样本的个数)/(我们测试得到的所有的y=1的样本个数);
而recall就是图中所有真正得癌症的人中,我们真正预测对了多少。(模型测试得到的真正的y=1的个数)/(在测试集中的y=1的个数)。也就是recall如果能够逼近1,那么是个好事情,因为分母是固定的,分子越大,说明我们预测到更多的得癌症的人。
那么如何来使用这两个量化方法呢
正如图所示,假设我们使用的是回归模型,但是我们用来做分类,那这时候在最后得到的样本概率的时候,我们可以设置一个阈值来区分大于多少我们判定为一类,小于多少判定为另一类,原来是对半开,0.5,但是这里假设是预测癌症,很需要置信度,就是不能让病人没病的白花钱,所以将只有超过0.7的才判为得了癌症,这时候对于recall来说,分母是不变的,但是分子变小了,所以是低recall。对于precision来说,分子是对1的正确的预测,而分母是有(真正得癌症的,和误诊的认为得了癌症)(个人认为两个类应该属于中心密集,周围稀疏的分布,所以造成改动了置信度,分母的变化比分子大,分母变得更小了),成为了高精度的结果。
假设将置信度调小,那么因为得到了更多正确诊断的人,那么对于recall来说,分子变大了,分母是固定的,所以是high recall。而对于precision来说,分子变化的没有分母大,分母变大了,造成更多的人本来没病,结果却被诊断为有病(这里的分子,分母的变化需要细细的想想。一个说服自己的理由是这是一个有着skewed class的数据集,那么改动了阈值后,自然一个样本的量很少,会有大量的非skewed class的样本被误预测)那就得到了一个low precision。
当我们得到了不同模型的precision和recall的时候我们如何判断这个模型比另一个模型好呢
开始想简单的求均值,但是这个显然不行,。这里推荐个f score的算法,(有点像初中物理的电学的两个并联电阻,哈哈哈),
本视频最后发现一个大数据的好处
当你的参数集够大,模型够复杂,那么就有个low bias,即不会欠拟合,但是有可能过拟合,但是当给出够多的数据的时候,就会避免过拟合,而得到一个low variance。(虽然与之前博文的自然数据的猜想有所不同,但是还是听大师的),这就造成两全其美,够好的模型和足够多的数据,能得到low bias和low variance。