假如我们在开发一个机器学习系统,想试着改进一个机器学习系统的性能,我们应该如何决定接下来应该选择哪条道路?
为了解释这一问题,以预测房价的学习例子。假如我们已经得到学习参数以后,要将我们的假设函数放到一组新的房屋样本上进行测试,这个时候我们会发现在预测房价时,产生了巨大的误差,现在我们的问题是要想改进这个算法接下来应该怎么办?
实际上我们可以想出很多种方法来改进算法的性能,其中一种办法是使用更多的训练样本。具体来讲,通过电话调查、上门调查,获取更多的不同的房屋出售数据。遗憾的是,好多人花费了大量时间在收集更多的训练样本上,他们总认为要是有两倍甚至十倍数量的训练数据那就一定会解决问题的。但有时候,获得更多的训练数据,实际上并没有作用,接下来,我们将解释原因。另一个方法,我们也许能想到的是尝试选用更少的特征集,比如X1,X2,X3等等。我们也许可以花一点时间,从这些特征中仔细挑选一小部分来防止过拟合。或者也许需要用更多的特征,假如目前的特征集对你来讲并不是很有帮助,你希望从获取更多特征的角度来收集更多的数据。同样的,你可以把这个问题扩展为一个很大的项目,比如使用电话调查,来得到更多的房屋案例,或者再进行土地测量来获得更多有关这块土地的信息等等,因此这是一个复杂的问题。同样的道理,我们非常希望在花费大量时间完成这些工作之前,我们就能知道其效果如何。我们也可以尝试增加多项式特征的方法,比如x1的平方,x2的平方,X1,X2的乘积。我们可以花很多时间来考虑这一方法,我们也可以考虑其他方法,减小或增大正则化参数lambda的值。
上面列出的6个原因,都可以扩展成一个六个月或更长时间的项目。遗憾的是,大多数人用来选择这些方法的标准,是凭感觉,也就是说大多数人的选择方法是,随便从这些方法中选择一种,比如他们会说“我们来多找点数据吧”,然后花上六个月的时间收集了一大堆数据,然后也许另一个人说,“让我们来从这些房子的数据中多找点特征吧”。很多人花了至少六个月时间来完成他们随便选择的一种方法,而在六个月或者更长时间后,他们很遗憾地发现自己选择的是一条不归路。