上次写了一个一次函数y=ax+b类型的最小二乘法,即可以看做是n维输入列向量对应的一个n维输出列向量,然后对已知结果进行学习,得到拟合公式。这里对m*n的矩阵进行最小二乘法分析。
设模型的输出为和训练集输出,它们之间的平方误差为:
学习目标就是得到模型参数θ 使得平方误差最小,加个系数1/2是为了更好的微分。
平方误差是残差 的 l2 范数,因此最小二乘学习法有时候也称为 l2 损失最小化学习法。
如果使用线性模型
训练样本的平方差就能表示为下列形式
在这里,是训练输出的n维向量。Φ是下式定义的n*b阶矩阵,也称为设计矩阵
训练样本的平方差的参数向量θ的偏微分为
将此偏微分设置为0,就得到了最小二乘解满足的关系式
可以得到方程式的解为:
这里+为剑标,对于只有方阵,非奇异矩阵才能定义逆矩阵,广义逆矩阵则是矩形矩阵或奇异矩阵都可以定义,是对逆矩阵的推广。
对基函数
进行最小二乘法学习。
%采用的方法是直接使原始输出y=系数*方程矩阵,求出系数,然后再乘以新的方程矩阵就得到结果了
clear
clc
n=50;
N=1000;
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);%样本第一列为1
P(:,1)=ones(N,1);%待测样本第一列也为1
for j=1:15p(:,2*j)=sin(j/2*x); p(:,2*j+1)=cos(j/2*x);P(:,2*j)=sin(j/2*X); P(:,2*j+1)=cos(j/2*X);
end
t=p\y;
F=P*t;
figure(1);
clf;
hold on;
axis([-2.8 2.8 -0.5 1.2]); %设置x轴的区间和y轴的区间
plot(X,F,'g-');
plot(x,y,'bo');
结果图:
对顺序为i的训练样本的平方差通过权重wi≥0进行加权,然后再采用最小二乘法学习,称为加权最小二乘学习法。
加权最小二乘学习法与没有权重时相同。
W是以w1,....,wn为对角元素的对角矩阵。