在这里插入图片描述
在这里插入图片描述
奇异值矩阵分解:
在这里插入图片描述
在这里插入图片描述

n =50;%50 个节点
N=1000;%1000 个节点
x=linspace(-3,3,n)';%在 -3 到 3 上找 50 个节点
X=linspace(-3,3,N)';%在 -3 到 3 上找 1000 个节点
pix=pi*x;% π * x
y=sin(pix)./(pix)+0.1*x+0.2*randn(n,1);%通过函数f(x) 得到 y。

x2 = x.^2;
X2 = X.^2;
hh=2 * 0.3^2;%带宽为 0.3
l = 0.1;%正则化为0.1
k = exp(-(repmat(x2,1,n) + repmat(x2',n,1)-2*x*x')/hh);
K = exp(-(repmat(X2,1,n) + repmat(x2',N,1)-2*X*x')/hh);
t1=k\y; 
F1=K*t1;

%添加L2正则化约束条件
t2=(k^2+l*eye(n))\(k*y);%这里是字母 l ,不是数字 1。
% eye(n) 产生返回一个主对角线元素为1且其他位置元素为0的nxn的单位矩阵
F2 = K*t2;

figure(1);
clf;
hold on;
axis([-2.8 2.8 -0.5 1.2]);% X 轴的范围是-2.8 ~ 2.8。Y 轴的范围是 -0.5 ~ 1.2
plot(X,F1,'g-');
plot(X,F2,'r--');
plot(x,y,'bo');

legend('Ls','L2-Constrained Ls');

下面是对代码的解释:

n = 50; 和 N = 1000; 定义了两个变量,分别表示节点的数量。n 表示50个节点,N 表示1000个节点。

x = linspace(-3, 3, n)'; 和 X = linspace(-3, 3, N)'; 生成了在-33范围内均匀分布的节点。x 是一个包含50个节点的列向量,X 是一个包含1000个节点的列向量。

pix = pi * x; 计算了 pi * x,将得到的结果赋值给变量 pix。

y = sin(pix)./(pix) + 0.1 * x + 0.2 * randn(n,1); 根据函数 f(x) 计算了 y 值。这里使用了 sin(pix)./(pix) 计算了一个 sinc 函数,加上了一些噪声项 0.1 * x + 0.2 * randn(n,1)。

x2 = x.^2; 和 X2 = X.^2; 计算了 x 和 X 的平方,分别赋值给 x2 和 X2 变量。

hh = 2 * 0.3^2; 设置了一个带宽参数,这里的计算是 2 * 0.3 的平方。

l = 0.1; 设置了一个正则化参数。

k = exp(-(repmat(x2,1,n) + repmat(x2',n,1) - 2*x*x')/hh); 和 K = exp(-(repmat(X2,1,n) + repmat(x2',N,1) - 2*X*x')/hh); 计算了高斯核函数。这里使用了矩阵运算和指数函数 exp() 来计算高斯核矩阵。

t1 = k\y; 使用最小二乘法求解系数向量 t1,即将高斯核矩阵 k 与目标值向量 y 进行线性回归。

F1 = K * t1; 将测试数据的高斯核矩阵 K 与系数向量 t1 相乘得到预测的输出值 F1。

t2 = (k^2 + l * eye(n)) \ (k * y); 在最小二乘法的基础上,添加了L2正则化约束条件。其中 (k^2 + l * eye(n)) 表示在核矩阵 k 的基础上加上正则化项,eye(n) 是一个大小为 n 的单位矩阵。然后,使用线性回归求解系数向量 t2。

F2 = K * t2; 将测试数据的高斯核矩阵 K 与系数向量 t2 相乘得到带有L2正则化约束的预测输出值 F2。

代码接着绘制了图形,并在图例中添加了相应的标识。

在这里插入图片描述

更多推荐