一、实 验 目 的: 

  1、验证线性递归模型的理论算法;

2、调整实验参数,加深对线性递归模型的认识。

二、实 验 原 理

给定数据集D={(x1,y1),(x2,y2),……,(xm,ym)},其中xi=(xi1;xi2;xi3,……,xid),yi∈R.线性回归试图学得一个线性模型以尽可能的预测实值输出标记。

1、线性回归是回归问题中的一种,线性回归假设目标值与特征之间线性相关,一般形式满足多元一次方程。通过构建损失函数,求解损失函数最小值时的参数b。一般形式如下:利用使得。其中,其中 f(x)为预测值,自变量 x和因变量y已知,为预测新增一个x,求对应的y值。为构建这个函数关系,目标是通过已知数据点,求解线性模型中w和 b两个参数。有m个样本,每个样本对应于一个n维特征和一个结果输出。

2、参数/模型估计:最小二乘法(least square method)

试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。

最小化均方误差:

分别对w和b求导,可得

三、实  验  设  备 与  器  件

PC机、 MATLAB软件。

四、实 验 内 容 与 参 数 分 析 

1、实验内容:在0-1之间生成500个数,接着利用相关公式观察实际函数与预测函数之间的差别,调试相关参数后所描绘出来的图形相较于之前有哪些明显的变化。

2、参数分析:在实验中x:生成的数据集,a,m,b分别是多项式函数模型中的各个系数,其中,y0这个函数是数据集的预测值结果汇总,其中yR是拟合线,经过实验代码的运行,描绘出如下图形:

在上方的图片中表示线性回归图,那其中横坐标表示生成数据的范围,纵坐标表示因变量的值,Data表示的是所生成的数据,fit表示符合程度。。

当把生成数据集的范围和生成数据集的数量适当扩大之后,代码运行的结果与上面的有着很大的变化幅度。生成的实际值与符合程度相差较大。

实验代码:

%% LinearRegression Script that demonstrates linear regression

% Fit a linear model to linear or quadratic data

%% Generate the data and perform the regression

x = linspace(0,1,500)';

n = length(x);

% Model a polynomial, y = ax2 + mx + b

a = 1.0; % quadratic - make nonzero for larger errors

m = 1.0; % slope

b = 1.0; % intercept

sigma = 0.1; % standard deviation of the noise

y0 = a*x.^2 + m*x + b;

y = y0 + sigma*randn(n,1);

% Perform the linear regression using pinv

a = [x ones(n,1)];

c = pinv(a)*y;

yR = c(1)*x + c(2); % the fitted line

%% Generate plots

h = figure;

h.Name = 'Linear Regression';

plot(x,y); hold on;

plot(x,yR,'linewidth',2);

grid on

xlabel('x');

ylabel('y');

title('Linear Regression');

legend('Data','Fit')

figure('Name','Regression Error')

plot(x,yR-y0);

grid on

xlabel('x');

ylabel('\Delta y');

title('Error between Model and Regression')

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐