线性模型(二)之多项式拟合

1. 多项式拟合问题

  多项式拟合(polynominal curve fitting)是一种线性模型,模型和拟合参数的关系是线性的。多项式拟合的输入是一维的,即x=x ,这是多项式拟合和线性回归问题的主要区别之一。

  多项式拟合的目标是构造输入xM 阶多项式函数,使得该多项式能够近似表示输入x 和输出y 的关系,虽然实际上xy 的关系并不一定是多项式,但使用足够多的阶数,总是可以逼近表示输入x 和输出y 的关系的。

  多项式拟合问题的输入可以表示如下:

D={(x1,y1),(x2,y2),...,(xi,yi),...,(xN,yN)}xiRyiR

  目标输出是得到一个多项式函数:

f(x)=w1x1+w2x2+wixi+...+wMxM+b=(i=1Mwixi)+b

其中M 表示最高阶数为M

  可见在线性拟合的模型中,共包括了(M+1) 个参数,而该模型虽然不是输入x 的线性函数,但却是(M+1) 个拟合参数的线性函数,所以称多项式拟合为线性模型。对于多项式拟合问题,其实就是要确定这(M+1) 个参数,这里先假设阶数M 是固定的(M 是一个超参数,可以用验证集来确定M 最优的值,详细的关于M 值确定的问题,后面再讨论),重点就在于如何求出这(M+1) 个参数的值。

2.优化目标

  多项式拟合是利用多项式函数逼近输入x 和输出y 的函数关系,通过什么指标来衡量某个多项式函数的逼近程度呢?(其实这就是误差/损失函数)。拟合/回归问题常用的评价指标是均方误差(在机器学习中的模型评估与度量博客中,我进行了介绍)。多项式拟合问题也同样采用该评价指标,以均方误差作为误差/损失函数,误差函数越小,模型越好。

E(w,b)=1Ni=1N[f(xi)yi]2

  系数1N 是一常数,对优化结果无影响,可以去除,即将均方误差替换为平方误差:

E(w,b)=i=1N[f(xi)yi]2

   到这里,就成功把多项式拟合问题变成了最优化问题,优化问题可表示为:

argminw,bE(w,b)

即需要求得参数{w1,...,wM,b} 的值,使得E(w,b) 最小化。那么如何对该最优化问题求解呢?

3. 优化问题求解

3.1 求偏导,联立方程求解

   直观的想法是,直接对所有参数求偏导,令偏导为0,再联立这M+1 个方程求解(因为共有M+1 个参数,故求偏导后也是得到M+1 个方程)。

E(w,b)=i=1N[f(xi)yi]2=i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)yi]2

利用E(w,b) 对各个参数求偏导,如下:

E(w,b)wj=2i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)yi]xijE(w,b)b=2i=1N[(w1xi1+w2xi2+wixij+...+wMxiM+b)yi]

求导之后,将各个点(xi,yi) 的值带入偏导公式,联立方程求解即可。

  针对该解法,可以举个例子详细说明,比如有两个点(2,3),(5,8) ,需要利用二阶多项式f(x)=w1x+w2x2+b 拟合。求解过程如下:

  1. 该二阶多项式对参数求偏导得到

    E(w,b)wj=2i=12[(w1xi1+w2xi2+b)yi]xij=[(w1x1+w2x12+b)y1]x1j+[(w1x2+w2x22+b)y2]x2jE(w,b)b=2i=12[(w1xi1+w2xi2+b)yi]=[(w1x1+w2x12+b)y1]+[(w1x2+w2x22+b)y2]
  2. 将点(2,3),(5,8) 带入方程,可以得到3个方程,

    2b+7w1+29w2=117b+29w1+133w2=4629b+133w1+641w2=212
  3. 联立这三个方程求解,发现有无穷多的解,只能得到3w1+21w2=5 ,这三个方程是线性相关的,故没有唯一解。

  该方法通过求偏导,再联立方程求解,比较复杂,看着也很不美观。那么有没有更加方便的方法呢?

3.2 最小二乘法

   其实求解该最优化问题(平方和的最小值)一般会采用最小二乘法(其实最小二乘法和求偏导再联立方程求解的方法无本质区别,求偏导也是最小二乘法,只是这里介绍最小二乘的矩阵形式而已)。最小二乘法(least squares),从英文名非常容易想到,该方法就是求解平方和的最小值的方法。

  可以将误差函数以矩阵的表示(N 个点,最高M 阶)为:

Xwy2

其中,把偏置b 融合到了参数w 中,

w={b,w1,w2,...,wM}

X 则表示输入矩阵,

[1x1x12...x1M1x2x22...x2M...............1xNxN2...xNM]

y 则表示标注向量,

y={y1,y2,...,yN}T

因此,最优化问题可以重新表示为

minwXwy2

对其求导,

Xwy2w=(Xwy)T(Xwy)w=(wTXTyT)(Xwy)w=(wTXTXwyTXwwTXTy+yTy)w

在继续对其求导之前,需要先补充一些矩阵求导的先验知识(常见的一些矩阵求导公式可以参见转载的博客https://blog.csdn.net/lipengcn/article/details/52815429),如下:

xTax=aaxx=aTxTAx=Ax+ATx

根据上面的矩阵求导规则,继续进行损失函数的求导

Xwy2w=(wTXTXwyTXwwTXTy+yTy)w=XTXw+(XTX)Tw(yTX)TXTy=2XTXw2XTy

其中XTXw=(XTX)Tw .令求导结果等于0,即可以求导问题的最小值。

2XTXw2XTy=0w=(XTX)1XTy

  再利用最小二乘法的矩阵形式对前面的例子进行求解,用二阶多项式拟合即两个点(2,3),(5,8)

  1. 表示输入矩阵 X 和标签向量y

    X=[1241525]y=[38]T
  2. 计算XTX

    XTX=[272972913329133641]
  3. 矩阵求逆,再做矩阵乘法运算
    XTX 不可逆,故无唯一解。

  关于矩阵的逆是否存在,可以通过判断矩阵的行列式是否为0(det(A)=?0 来判断,也可以通过初等行变换,观察矩阵的行向量是否线性相关,在这个例子下,矩阵不可逆,故有无穷多解。但如果新增一个点(4,7) ,则就可以解了。

  其实这和数据集的点数和选择的阶数有关,如果点数小于阶数则会出现无穷解的情况,如果点数等于阶数,那么刚好有解可以完全拟合所有数据点,如果点数大于阶数,则会求的近似解。

  那么对于点数小于阶数的情况,如何求解?在python的多项式拟合函数中是可以拟合的,而且效果不错,具体算法不是很了解,可以想办法参考python的ployfit()函数的实现。

4. 拟合阶数的选择

   在前面的推导中,多项式的阶数被固定了,那么实际场景下应该如何选择合适的阶数M 呢?

  1. 一般会选择阶数M 小于点数N
  2. 把训练数据分为训练集合验证集,在训练集上,同时用不同的M 值训练多个模型,然后选择在验证集误差最小的阶数M

5. 后续

  如果后续还想写的话,可以考虑正则化问题。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章