Regression
构建一个模型分为四部,Set a model,Goodness of the function,Best function,Optimize the model.
这里的model是一组函数,我们只是改变函数的参数,本节课使用的是linear model,即可以写成以下形式的函数集合:
1.Set a model
背景案例为输入一个神奇宝贝(structure),预测其进化之后的cp值:
首先,先从一个简单的预测函数开始,假设输入只有神奇宝贝进化之前的cp值,那么我们设置以下函数进行预测:
其中,y代表预测的进化之后的cp值,b代表bise,w代表权重,xcp(feature)为进化之前的cp值。
2.Goodness of the function
其实任意给一个函数都可以拿来进行预测,差别只是预测的准不准,所以如果想要得到最好的预测函数,首先需要一个标准,根据这个标准来进行优化预测函数。所以我们设置一个可以评价预测函数的函数,称之为Loss Function。
换句话说,Loss Function设置的合不合适至关重要,有的预测函数在某一Loss Function的评价下表现不好,但是换一个Loss Function,有可能评价就会有很大提升,之后我们会看到相应的例子。
此处我们使用方差这个很直观的方式来作为Loss Function:
n从1到10代表有training data有10个,即10个(xcpn,y(帽))对,x和y的上标n代表第n个object,x的下标cp代表cp这个feature,y(帽)代表实际观测值。
经过计算,我们可以得到某一预测函数的表现好坏,Loss越大,表现越差,反之越好。
下面的图是一些预测函数好坏的展示,蓝色为Loss很小,红色Loss很大:
3.Best function
所以,我们的目标就是找到一对w,b能使得Loss function最小,这里采用Gradient Descent方法:
所谓Gradient Descent方法就是沿着梯度方向改变参数值,故对于含有w,b两个参数的预测函数来说:
其中改变量取决于两个,一个是微分值,一个是学习率η,其二的乘积即为改变量,加负号的原因是微分值为负,变量增加,变化方向正好与微分值相反,故加了负号。
在采用Gradient Descent方法后,得到的最优函数在Training data上的表现:
在Test Data上的表现:
可以看到在测试集上的表现比训练集上的稍微差一些,那么可以优化吗?
4.Optimize
(1)Change model
第一种方法是不停的增加高次项,因为更多高次项意味着可采用的函数范围更大
仍然采用Gradient Descent和方差作为Loss Function的前提下,这些模型的表现如下:
我们发现,当增加三次项之后,训练集和测试集上的表现比二次项有了些微的改善,但是增加四次项后,训练集上的表现提高,但是测试集上的表现却变差了,这种现象叫做Overfitting。
第二种方法是增加除了xcp之外的feature,此处增加了物种这一feature,并使用定义δ函数来乘以cp值来根据不同的物种得到不同的函数。
结果表现大幅提高:
那么能不能考虑更多的feature是不是会得到更好的结果?
考虑除了cp和物种之外,hp,height,weight,结果发生了Overfitting。
(2)Change Loss Function (Regularization)
红框里的项就是为了实现Regularization,此时Loss Function由两部分组成就,第一部分为方差,反映的是观测值与预测值的差距,越小越好;第二项为正则项,按照我们寻找更小Loss Function的目标,λ确定的情况下,w越小,function表现越好,这就意味着,当x发生变化时,对应y的变化就会越小,意味着整个曲线会更平滑,换句话说,在增加了正则项之后,我们会更倾向于找更平滑的曲线。
而之所以有这样的倾向是因为更平滑的曲线受到杂噪点的影响更小。
正则化不考虑bise的原因是,bise只会改变起始值,并不会对平滑度产生影响。
在增加正则项之后的效果:
在λ到100之前,训练集和测试集上的表现都有改善,但是到了100之后,表现变差,这是因为当λ太大时,通过Loss Function找到的best function中的w就会很小,意味着曲线会特别平滑,这就会与训练集上的点和测试集上的点距离较大,进而误差增大。
Conclusion
综上所述,建立模型,设置Loss Function,使用Gradient Descent找到best function这三步为找到理想函数的完整过程,如果没有找到理想的函数,就需要分析原因,进行改进。可以修改模型,修改模型可以有两种方式:
-
修改模型:
(1)线性模型可以增加高次项,更高次项意味着更大的函数空间,就更有机会找到更好的函数,但也有课程出现过拟合。
(2)可以通过增加feature,对每一个object考虑更为全面,从而改善表现。 -
修改Loss function
增加正则项,正则项会使函数更加平滑,从而减少杂噪点影响,得到更好的表现,但是正则项太大也会使得其反。
文章评论