原理: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);