原理:wx+b,x是输入,求得的结果与真实值y求均方误差。
采用链式法则求导
参数更新,梯度下降法(批量梯度下降)
随机生成数据:
m=100;生成100个数据,并添加随机噪声
clear;
W = 10; %参数初始化
B = 10;
learning = 0.0001; % 学习率
m=100;%数据个数
X=linspace(1,10,m);%生成数据
Y = 2 * X + 1+0.7*randn(size(X)); %数据加噪
查看数据分布:
for i = 1:10000 % 增加迭代次数以更好地拟合模型 % 计算当前模型的输出 out = W * X + B; % 计算损失 Loss = sum((out - Y).^2); % 计算梯度 grad_B = -2 * sum(Y - out); grad_W = -2 * sum((Y - out) .* X); % 更新参数 W = W - learning * grad_W; B = B - learning * grad_B;
end
迭代1000次后的结果
W: 2.010807, B: 1.038136
所有代码:
clear;
W = 10; %参数初始化
B = 10;
learning = 0.0001; % 学习率
m=100;%数据个数
X=linspace(1,10,m);%生成数据
Y = 2 * X + 1+0.7*randn(size(X)); %数据加噪plot(X,Y)
hold on;
% 梯度下降循环
for i = 1:10000 % 增加迭代次数以更好地拟合模型 % 计算当前模型的输出 out = W * X + B; % 计算损失 Loss = sum((out - Y).^2); % 计算梯度 grad_B = -2 * sum(Y - out); grad_W = -2 * sum((Y - out) .* X); % 更新参数 W = W - learning * grad_W; B = B - learning * grad_B;
end plot(X,W.*X+B)
fprintf('W: %f, B: %f\n', W, B);