针对某个问题,我们想要建立一个良好的模型进行解决,我们会尝试很多种办法。甚至一开始就花费大量的精力去构建一个非常复杂的系统,这是不好的,因为这样不仅花费大量的时间,而且最终的效果不确定,也就是说选择的这个方向到底对不对。
为了解决以上疑问,我们通常先构建一个简单地算法系统,即使运行的不完美,但是也把他运行一遍,最后通过交叉验证来检验数据。做完之后,我们就可以通过我们所学的学习曲线,来找出算法是否具有高偏差和高方差问题,或者别的问题。这样分析之后,再来决定用六种方法的哪一种方法来解决出现的问题,比如增加训练集来解决高方差问题。
这么做的原因就是:刚接触机器学习问题时,我们不能够提前知道是否需要更多的数据,是否需要更复杂的特征变量,是否增大或减小正则化参数 λ 等等。因此,我们很难知道应该把时间花在哪一个方向上来提高算法的表现。如果一开始就想着实现复杂的算法,尝试每个方向,很显然,浪费大量时间与精力,得不偿失。 所以我们先实现一个简单地算法(即使不完美),通过画出学习曲线来做出进一步的方向选择。
除了画出学习曲线以外,一件非常有用的事是误差分析,我们观察哪些数据被错误的预测,而这些数据之间又有什么样的规律,针对这些有规律的数据,我们可以构造新的特征变量或者系统的短处,启发我们去优化系统算法。
综上,构建一个算法的推荐方法为:
1.从一个简单地能快速实现的算法开始,实现该算法并用交叉验证集数据验证这个算法。
2.绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
3.进行误差分析:人工检查交叉验证集中我们算法产生预测误差的实例,看看这些实例是否具有某种系统化的趋势。