机器学习-2:MachineLN之模型评估

开篇废话:

很多文章其实都是将书中的东西、网上课程、或者别人的论文的东西总结一下,发出来,但是个人感觉还是加入个人的理解,然后加上一些工程中遇到的问题一起发出来会更好些。

正如学习再多tricks,不如踩一遍坑。 模型评估的标准有很多,但是适合自己的才是好的,我本人就比较喜欢看loss,而有些人更加关注准确率。

回想上学时候我们基本接受的都是被动接收知识,其实教的再好都不如好的提问,学习独立思考的能力,我学习的很多东西不是在课堂上老师所谓的教,而是在面试过程中面试官的提问,在项目中老板的提问、客户的提问,每次我都能学到很多东西,因为他们问的我很多有点含糊,或者不会,然后就回来自己学习总结,接下来又去被问,又学习又总结,也因此刚毕业换了几次工作,看到这里大家肯定感觉我是奇葩中奇葩,其实我不反对,别人怎么看我并不重要,只要自己知道自己想要的是什么就好,有人可能会问,刚毕业就换工作是不是不太好? 我可以跟你说没关系,迈开第一步,万事大吉。

那么我的问题是:

(1)为什么要评估模型?

(2)评估模型有哪些方法?

(3)不同的方法针对什么问题?

(4)根据评估的结果如何调优?

(5)根据评估结果怎么判定模型训练完成?

看到这里你的答案是什么? 那么下面是我的答案,欢迎批评指正。

(1)为什么要评估模型?

其实我们去评估模型最终是为了,得到符合我们数据或者是业务的最优模型,但是这往往不是一蹴而就的,反而使得评估模型通常成了下一步我们调参或者调优的一个参考。

(2)评估模型有哪些方法?

通常很多书籍中不会将loss(MachineLN之三要素中策略,也就是你的损失函数、目标函数的值)作为模型的评估标准,反而loss是一个很重要的标准,他将左右你调参过程中的很多参数,并且可以成为你判定是否模型训练完成的标准,譬如我们看到loss一直波动比较大,我们很自然的会想到是你的学习率太大了吧,后来loss开始波动很大,回来慢慢的平稳下降,这可能是数据分布的影响,可能是你样本的预处理方式;个人喜欢看loss,而准确率有时候在很长时间里波动不会很大;看到这里不要迷糊,总之还是那句话自己去踩踩坑,比什么都重要。

模型评估的方法相比大家都不陌生,只要看过一些机器学习的基础知识都可以知道一些,我在想要不要再写一下呢,纠结中...

评价的方法有:

错误率(error rate)= a个样本分类错误/m个样本精度(accuracy)= 1 -错误率

误差(error):学习器实际预测输出与样本的真是输出之间的差异(差异的标准可以定义为相似度或者距离)。

训练误差(training error):即经验误差。学习器在训练集上的误差。

泛化误差(generalization error):学习器在新样本上的误差。

真正例(True Positive,TP):真实类别为正例,预测类别为正例。

假正例(False Positive,FP):真实类别为负例,预测类别为正例。

假负例(False Negative,FN):真实类别为正例,预测类别为负例。

真负例(True Negative,TN):真实类别为负例,预测类别为负例。

image

ROC: 纵轴:真正例率 TPR;横轴:假正例率FPR;

image

AUC:ROC曲线下面的面积。

准确率,又称查准率(Precision,P);

image

召回率,又称查全率(Recall,R):(例如在人脸检测中有多少人脸检测到了,漏掉了多少人脸)

image

等;

上面基本上是分类模型的评价标准,而在回归模型中,一般都是通过距离或者相似度来衡量(欧氏距离等)。有点乱,可以去看看周老师的机器学习一书。

(3)不同的方法针对什么问题?

在(2)中回答过了。

(4)根据评估的结果如何调优?(都是基于深度学习的,?)

  • 当训练集的效果(准确率)上不去,和贝叶斯估计(人的表现)存在一定差距的时候:(1)增加模型的复杂度。 或者直接多加几层。(2)现在目前效果非常好的一些模型:resnet,inception等。(3)重新选择优化函数:AdamOptimizer,MomentumOptimizer,RMSPropOptimizer等等。

  • 训练集效果表现好,测试集效果表现不好:(1)增加训练样本的数量。(2)正则化:L2范数,dropout等(dropout原理是什么呢?使随机使神经元失活,相当于把一个复杂的模型拆分开,测试后时候凑到一起,集成学习的思想,又刹不住闸了。。。)。(3)还要观察训练样本和测试样本的分布是否一致。(4)交叉验证。

  • 还有像样本预处理:(1)归一化:img/255.0,img-0.5, img*2,将数据转化为[-1,1].(2)减去均值除以方差。(3)减去样本各通道的均值。

  • 还有loss的选择啊,多标签单分类适合用softmax_cross_entropy(对于多标签多分类的要用多个softmax),多标签多分类常用sigmoid_cross_entropy。

  • data augmentation。

  • 还要注意BN的使用,学习率的选择,batch_size的大小。

可以参考博客:http://blog.csdn.net/u014365862/article/details/78519727

深度学习的这么坑你都遇到过吗?:http://blog.csdn.net/u014365862/article/details/77961624

(5)根据评估结果怎么判定模型训练完成?

很多人都说:loss不再怎么变化,或者准确率不再怎么变化,ML书中一般都是交叉验证选最好的,但是dl中往往是选择什么时候停止,其实真实的情况往往是这个样子的(如下图),开始模型是欠拟合的,随着迭代次数的增多,模型会慢慢收敛,但是过了一个点以后,会呈现过拟合,这种情况怎么调参? 有哪些解决方法? 哦,发现自己好烦,我同事和大家一样也很烦我,说我问题真多,哈哈。。。我在迁移学习过程中一般都是从更新最后一层参数开始,根据自己的数据量来判断要更新最后几层的参数,更新多了会过拟合,少了会欠拟合,当然你还可以设置正则化等等。

image.png

(6)总结

模型评估还是很重要的,但注意不同的标准可能评估的结果有点差异,还想简单提一下,偏差和方差的问题,后面的学习中可能会用到,先看一下这张图(其实就是上面那张图),其实我们模型的误差Error = Bias + Variance + Noise。 鱼和熊掌不可兼得。

可以参考:http://blog.csdn.net/u014365862/article/details/76360351

image
image

推荐阅读:

  1. 机器学习-1:MachineLN之三要素

  2. 机器学习-2:MachineLN之模型评估

  3. 机器学习-3:MachineLN之dl

  4. 机器学习-4:DeepLN之CNN解析

  5. 机器学习-5:DeepLN之CNN权重更新(笔记)

  6. 机器学习-6:DeepLN之CNN源码

  7. 机器学习-7:MachineLN之激活函数

  8. 机器学习-8:DeepLN之BN

  9. 机器学习-9:MachineLN之数据归一化

  10. 机器学习-10:MachineLN之样本不均衡

  11. 机器学习-11:MachineLN之过拟合

  12. 机器学习-12:MachineLN之优化算法

  13. 机器学习-13:MachineLN之kNN

  14. 机器学习-14:MachineLN之kNN源码

  15. 机器学习-15:MachineLN之感知机

  16. 机器学习-16:MachineLN之感知机源码

  17. 机器学习-17:MachineLN之逻辑回归

  18. 机器学习-18:MachineLN之逻辑回归源码

版权声明:本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。