最小二乘学习法是对模型的输出
和训练集输出
的平方误差
为最小时的参数
进行学习,式中之所以加上系数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)/x
n = 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 : 15
p(:,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 ;
end
F = 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 : 15
p(:,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) ;
end
t = 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') ;
生成的图像如图所示