之前介绍的最小二乘学习算法都是无约束条件的,今天介绍的是带有部分空间约束条件的最小二乘算法。
我们回顾一下最小二乘法推导过程
带有部分约束的表达式如下:
我们使用同样的方法,关于a求偏导,令偏导数为零就可以得到其最优值,这里就不做推导了。
代码如下:
clear; closeall; clc;
n = 50;% 训练样本个数
N = 1000;% 测试样本个数
x = linspace(-3,3,n)';% n个样本服从-3到3的均匀分布
X = linspace(-3,3,N)';
pix = pi*x;
y = sin(pix)./pix - 0.01*x + 0.05*randn(n,1);% 拟合的函数
H(:,1) = ones(n,1);
P(:,1) = ones(N,1);
L = 15;% H矩阵的列数,即基函数的个数的一半,因为sin和cos各一半
fori= 1:L
H(:,2*i) = sin(i/2*x);
H(:,2*i+1) = cos(i/2*x);
P(:,2*i) = sin(i/2*X);
P(:,2*i+1) = cos(i/2*X);
end
t1 = H\y;
F1 = H*t1;
t2 = (H*diag([ones(1,11) zeros(1,20)]))\y;
F2 = P*t2;
plot(x,F1,'g-','linewidth',2);
holdon
plot(X,F2,'r--','linewidth',2);
plot(x,y,'bo','linewidth',2);
axis([-2.8,2.8,-0.4,1.2]);
legend('Least Square','Subspace-Consttrained LS','Training Samples');
最后的运行结果如下:
以上就是今天推送的内容,欢迎讨论。
领取专属 10元无门槛券
私享最新 技术干货