机器学习—再次决定下一步做什么
通过看Jtrain和Jcv,即训练错误和交叉验证错误,或者甚至绘制学习曲线,你可以试着去感受一下,你的学习算法是高偏差还是高方差,一种学习算法,会经常看训练错误和交叉验证错误,尝试判断算法是高偏差还是高方差,事实证明,这将帮助你更好地决定下一步要尝试什么。
如果你对预测房价实施了正则化线性回归,但你的算法在预测中犯了不可接受的大错误,下一步要尝试什么,这是六个想法,获取更多的训练示例,尝试一组小功能,附加功能等等。事实证明,这六项中的每一项要么有助于修复高方差要么是高偏见问题,尤其是如果你的学习算法有很高的偏差,其中三种技术将是有用的,如果你的学习算法有很高的方差,那么这三种不同的技术将是有用的,1.获取更多的训练示例,如果你的算法有很高的偏差,唯一能做的就是自己获取更多的训练数据,可能用处不大,但相比之下,如果你的算法有很高的方差,说它太适合一个非常小的训练集,那么得到更大的训练例子会有很大的帮助,因此,获得更多训练示例的第一个选择有助于解决高方差问题;2.有时如果你的学习算法有太多的特征,然后它给了算法太多的灵活性来拟合非常复杂的模型,如果你把X X² X³,一直到四次方,如果你能消除其中的一些,那么模型就不会那么复杂了,它不会有这么大的方差,如果你怀疑你的算法有许多实际上不相关的特性或有助于预测房价或者如果你怀疑有一些多余的功能,然后消除或减少特征的数量,将有助于降低算法过度拟合数据的灵活性,所以这也可以帮助修复高方差;3.反过来说,获取附加功能,那只是增加了额外的功能,与去一个较小的功能集相反,这将帮助修复一个高偏差问题作为一个具体的例子,如果你试图根据房子的大小来预测房子的价格,但是,事实证明,房子的价格取决于卧室的数量,在楼层数和房龄上,除非添加这些额外的特性,否则算法永远不会做的那么好,所以这是一个高偏差问题,因为你在训练场上做不到,当你只知道大小,只有当你告诉算法有多少间卧室时,有几层,这房子有几年历史了,有了足够的信息,甚至在训练集上做得更好,因此,添加额外的特性是解决高偏差问题的一种方法;4.添加多项式特性有点像添加附加特性,所以如果你是线性函数直线,不能很好地适应训练集,然后添加额外的多项式特性可以帮助你在训练集上做的更好,是解决高偏差问题的一种方法,5.然后递减lambda,对正则化参数使用较低值的方法,这意味着我们将减少对这一术语的关注,帮助解决高偏差问题;6.最后很好的增加lambda,说明过度拟合了数据,因此,增加lambda是有意义的,如果它过度适应训练集,只是把太多注意力放在训练上,但以推广新例子为代价,因此,增加lambda将迫使算法拟合更平滑的函数,也许是一个不那么摇摆不定的功能,用它来解决一个高方差问题。
如果你发现你的算法有很高的方差,两个主要的修复方法是获得更多的训练数据或者简化模型(获得较小的特征集,增加正则化参数lambda),所以你的算法不太灵活,无法适应非常复杂的情况,非常摆动的曲线;如果你的算法有很高的偏差,那就意味着即使在训练场它也做的不好,主要的修复是使模型更加强大,使其具有更大的灵活性,以适应更复杂或更灵活的功能,因此一些方法是给它额外的功能,或者增加多项式特征,或者减少正则化参数lambda。
如果你应该通过减少训练集大小来修复高偏差,那实际上没有帮助,如果减少训练集大小,会更适合训练集,但这会使交叉验证错误恶化以及你的学习算法的性能,所以不要随意扔掉训练例子,只是为了解决一个高偏差问题。