机器学习应用建议

Published: 29 Sep 2012 Category: 理论及算法

本文是视频的笔记,讲稿中并没有这个内容,所以记得有点乱。本文将的是在使用机器学习解决问题时需要注意的内容和建议。

1 调试学习算法

在使用机器学习时,如果发现学习后的效果并不好(误差较大),对算法进行改进的一些方向和方法。

例如:在垃圾分类的问题中,选取了50000个单词中的100个单词作为特征,使用贝叶斯逻辑回归(梯度下降),有20%的测试误差。

在这种情况下,可以想象的有一下八种优化方法:

  1. 使用更多的训练样本
  2. 100个单词作为特征太多,减少一些
  3. 特征太少,增加一些
  4. 更换一些特征(单词)
  5. 梯度下降还没有收敛,再运行几次梯度下降算法
  6. 使用牛顿方法
  7. 更换算法参数
  8. 使用SVM算法

如果盲目的使用以上优化方法,可能会浪费很多时间,比如可能已经有了足够的训练样本,但是使用者不知道而去获取更多的训练样本,可能结果并没有好转。所以要根据一些方法判断如何优化。

首先,可以判断误差过大是因为高偏差还是高方差造成的。判断的方法是比较训练误差和测试误差,对于高方差来说,测试误差远大于训练误差。而对于高偏差来说,测试误差很高,同时训练误差也很高。

高方差学习曲线:

高偏差学习曲线:

对于刚刚开始那八种优化方法的前四种,1、2是解决高方差问题,3、4是为了解决高偏差问题。所以,当我们知道我们现在的学习算法的不精确是因为高方差还是高偏差以后就可以一次选择一个合适的优化方法。

除了判断训练错误的原因是高偏差还是高方差之外,我们还有第二种调试方法:判断误差的原因是因为算法还没有收敛还是因为目标函数的选择有问题。判断此问题的方法video里面已经详细给出,我这里就不详细介绍。

总之,当学习算法不能很好的工作时,就和我们平时编程一样,我们需要去debug找到算法工作不正常的地方,找到一个目标才能对其进行修改。这里面有一些经验上的知识,也有指导性的知识。总之,在算法工作不正常的情况下,不要盲目的优化!

2误差分析

对于大部分系统(包括但也不仅仅包括学习系统)来说,一般包括多个组件,每个组件实现一个小功能,而通过整合实现一个总体功能满足最后的需求。比如人脸识别系统,可能包括图像预处理、背景识别、眼睛识别、鼻子识别等等。。。当这个系统的误差较大时,我们需要首先去判断哪个组件是误差的较大贡献者,而对其进行重点优化。

可以使用以下方法进行分析:依次将组件的输出精确率人工的提升为100%,而观察系统的最终结果。那一个组件的精确率的提升造成结果的提升最多,说明这个组件是瓶颈。

还有一种情况,目前获得的结果不错,我们想分析是因为那些特征/组件而获得了不错的结果,可以依次去掉这些特征/组件,观察精度下降的程度。

3 Getting start on a problem

在开始解决一个学习问题时,有两种解决思路:

  1. 仔细设计系统,提取正确的特征,采集正确的数据,使用正确的算法。这种方法是将工作量放在前期,获得的结果可能比较好。
  2. 创建一个草稿然后进行不断修改。先实现简陋的解决方案,利用误差分析/诊断方法进行不断的修改。优点:可以快速的建立系统,找到关键的部分并对其进行重点优化和修改。

?

?

?