参考文章/jairuschan/article/details/7517773
最小二乘学习法是对模型的输出和训练集输出的平方误差为最小时的参数进行学习,式中之所以加上系数1/2,是为了约去对进行微分时得到的2。
“LS”是Least Squares的首字母。平方误差是残差的范数,因此最小二乘学习法有时也称为损失最小化学习法。
如果使用线性模型
的话,训练样本的平方差就能够表示为如下形式。
在这里,是训练输出的n维向量,是下式中定义的n*b阶矩阵,也称为设计矩阵
训练样本的平方差的参数向量的偏微分以
这样的形式给出。如果将其微分设置为0,最小二乘解就满足关系式
这个方程式的解使用设计矩阵的广义逆矩阵来进行计算,可以得出。
相对于只有方阵、非奇异矩阵才能定义逆矩阵,如果存在逆矩阵,可以使用如下公式计算。
广义逆矩阵则是矩形矩阵或奇异矩阵都可以定义,是对逆矩阵的推广。有逆矩阵的时候,广义逆矩阵可以用下式表示
接下来谈谈这个线性函数,在上式中,是基函数向量的第i个因子,是参数向量的第i个因子。另外,b是基函数的个数。
对与曲线的拟合,我们通常把基函数变为多项式的形式或者变为b=2m+1的三角多项式形式
对于基函数是多项式,设计矩阵是
matlab程序代码拟合如下所示
clear ;%在[-3*pi,3*pi]生成50个数据点 sin(x)/xn = 50 ;x = linspace(-3,3,n)' ;pix = pi * x ;y = sin(pix) ./ (pix) + 0.1 * x + 0.05 * randn(n,1) ;%保存系数矩阵p(:,1) = ones(n,1) ;%默认15个参数for j = 1 : 15p(:,j+1) = x .^ j ;end%求出参数t = p \ y ;%曲线拟合,生成100个数据点N = 100 ;X = linspace(-3,3,N)' ;%生成y坐标P(:,1) = ones(N,1) ;for j = 1 : 15 P(:,j+1) = X .^ j ;endF = P * t ;%生成图像hold on ;axis([-2.8 2.8 -0.5 1.2]) ;plot(X,F,'g-') ;plot(x,y,'bo') ;
生成的图像如图所示
对于基函数是三角多项式,设计矩阵是
matlab程序代码拟合如下所示
clear ;n = 50 ;N = 100 ;x = linspace(-3,3,n)' ;X = linspace(-3,3,N)' ;pix = pi * x ;y = sin(pix) ./ (pix) + 0.1 * x + 0.05 * randn(n,1) ;p(:,1) = ones(n,1) ;P(:,1) = ones(N,1) ;for j = 1 : 15p(:,2*j) = sin(j*x) ;p(:,2*j+1) = cos(j*x) ;P(:,2*j) = sin(j*X) ;P(:,2*j+1) = cos(j*X) ;endt = p\y ;F = P * t ;figure(1) ; clf ; hold on ; axis([-2.8 2.8 -0.5 1.2]) ;plot(X,F,'g-') ;plot(x,y,'bo') ;
生成的图像如图所示