图解机器学习第二部分第四章——带约束条件的最小二乘学习法

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。
% 计算设计矩阵
p(:,1)=ones(n,1);
P(:,1)=ones(N,1);
for j=1:15
    p(:,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
t1=p\y; %t=(p'*p)\p' *y 这里简化了计算
F1=P*t1;

%添加约束条件
t2=(p*diag([ones(1,11) zeros(1,20)]))\y;%将部分空间约束
F2 = P*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','Subspace-Constrained Ls');


解释:
1、定义了 n 和 N 分别为节点的数量,分别为 5010002、使用 linspace 函数在范围 -33 之间生成 n 个节点,存储在 x 中。
3、计算 x 的每个元素与 π 的乘积,存储在 pix 中。
4、使用函数 sin(pix) ./ (pix) 计算每个 pix 元素的 sin(pix)/pix 的值,并添加噪声项 0.1 * x + 0.2 * randn(n, 1),得到目标值 y。
5、创建设计矩阵 p 和 P,其中 p 用于拟合训练数据,而 P 用于生成预测结果。
6p(:, 1)P(:, 1) 均为全 1 的列向量。
7、使用循环为每个奇数列索引 2*j 和对应的偶数列索引 2*j+1 填充 p 和 P,分别使用 sin 和 cos 函数对 x 和 X 进行变换。
8、使用最小二乘法计算参数向量 t1,其中 p \ y 等价于 (p' * p) \ p' * y,但采用了简化计算的形式。
9、使用约束条件对参数向量进行计算,其中 diag([ones(1,11) zeros(1,20)]) 生成一个对角矩阵,该矩阵前 11 个对角元素为 1,后面 20 个对角元素为 0,将其与 p 相乘并进行最小二乘计算,得到参数向量 t2。
10、分别使用参数向量 t1 和 t2 对输入 X 进行预测,得到结果向量 F1 和 F2。
11、创建一个图形窗口,并命名为 "figure(1)"。
12、使用 clf 清空当前图形窗口。
13、使用 hold on 保持图形窗口的当前图形,允许在其上绘制新的图形。
14、使用 axis 函数设置坐标轴的范围。
15、使用 plot 函数绘制预测结果 F1 和 F2,颜色分别为绿色实线和红色虚线。
16、使用 plot 函数绘制原始数据点 x 和 y,颜色为蓝色的圆点。
17、使用 legend 函数添加图例,分别为 "Ls" 和 "Subspace-Constrained Ls",对应两种拟合方式。

图解机器学习第二部分第四章——带约束条件的最小二乘学习法_第1张图片

你可能感兴趣的:(图解机器学习,机器学习,matlab)