回归----多项式拟合正弦曲线

来源:互联网 发布:淘宝实时交易 编辑:程序博客网 时间:2024/05/04 17:57


回归----多项式拟合正弦曲线

做了什么?

使用多项式拟合一个周期内、加入噪声的正弦曲线。


具体过程如下:

  • 数据生成:

在正弦函数sin(x)一个周期中均匀产生N个数据点,并在y轴上加入标准高斯分布的噪声,即

yi= sin(xi)+e,

e服从N(0,1),i<=N && i>=1, (xi, yi)表示第i个数据

  • 假设空间:

    这里使用多项式:

    h(x,w) = w0+w1*x+w2*x2+…

    即h(x) = wT*X,w为多项式系数(M维列向量),X的形式如下,

    X= [ 1 x x2 x3 … ]T

  • 优化目标:

    首先求解不加正则项的多项式,接着再求加入正则项的;

    我们想要使多项式尽可能的经过数据点,必须有某种指标去衡量多项式的好坏,这里使用每个数据点相对拟合多项式的偏差的平方和来衡量,当然希望这个损失越小越好。如果多项式的阶数越大,则损失会越小,但是这只是在训练集上的损失越来越小,即较好的拟合了训练集,这在训练集数量足够多的情况下是没有问题的;但是如果数据集数量较少,有可能在训练集上拟合的较好,但是有可能会出现过学习问题,即在验证集上的泛化能力降低,因此希望降低模型的复杂度,即通过加入正则项对模型复杂度进行惩罚(这里正则项采用二范式,也可使用一范式或者平方和等等)。下面对两种优化目标分别求解:

    1.    不加正则项的最小二乘法:


            

    2.    加入正则项的最小二乘法:


                             

    其中为w的二范式,y为N维列向量,X为N×M矩阵, X具体形式如下:


  • 求解策略:

    1.    对于第一种目标,即不加正则项的最小二乘,我们要最小化J(w),用J(w)对w求导并令导数为零,可以得到w的解析解:


2.    对于第二种目标,即加入正则项的最小二乘,我们无法通过求导为零求出w的解析解,必须使用优化方法去逼近最优解,这里使用梯度下降法来逼近最优解;

正则项系数的选取,若过小,模型还是会过学习,若过大,模型会过于简单,一般采用交叉验证的方法寻找最好的。

梯度下降过程:



(1)  首先选取w的初始值;

(2)  求梯度,并更新w值,

(3)  循环迭代第二步,直到前后两次J(w)的变化足够小。

  • 模型评价与选择

    在给定多项式次数M和正则项系数情况的最优模型能够求出,怎么评价不同M,的好坏呢?可以用模型在验证集上的损失来衡量它的好坏。

    具体做法可以采用交叉验证来遍历M和,最小损失对应的M和就是最好的,具体如下:

    对于每一对(M,),采用交叉验证可以求得一个损失,那么:



  • 实验结果

    1.    不加正则项的拟合



从图中可以看出,随着次数的增加,模型经过更多的点,变得越来越复杂,7次多项式经过最多的点,但没有刻画出正弦曲线的轮廓,产生了过拟合;反而更低次数,3次多项式更能反映正弦曲线。

2.    加入正则项拟合

下面第一幅图是,各个次数的多项式的最优的拟合曲线(没有给出),圆圈对应的是所有中最优的曲线



根据结果,最优M=4,当M=4时,不同 对应的损失loss如中间图所示,有一个最好的=0.3,此时的曲线在最右边的图


3.    因为自己编写的梯度下降函数收敛太慢,上面是调用matlab 库中梯度下降函数,下图是使用共轭梯度方法求得结果:





                                             
0 0
原创粉丝点击