线性回归其实就是寻找一条直线拟合数据点,使得损失函数最小。直线的表达式为:
yi=ω1xi,1+ω2xi,2+ωjxi,j+...+b
损失函数的表达式为:
J=12∑i=0m(yi−ypredict_i)2
其中m为数据点总数。
现在我们使用梯度下降法求解函数J的最小值,梯度下降法原理示意图如下:
如上图所示,只要自变量
我们要求解J函数的最小值,那么就要求出每个
由以上可以总结出ω和b的更新公式:
b=b−α∇J(b)
梯度公式(其实就是求导而已):
∇J(ωj)=∂J∂ωj=∑i=0m(yi−ypredict_i)(−xi,j)=∑i=0m(ypredict_i−yi)xi,j
∇J(b)=∂J∂b=∑i=0m(ypredict_i−yi)
系数α如果随着迭代的进行越来越小的话,有利于防止迭代后期震荡的发生,是算法收敛,α的更新公式:
α=1i+1+0.001
其中i是迭代次数,起始为0
下面是matlab的具体实现
样例数据
x = linspace(-2,2,40)';
y = 2*x+rand(length(x),1);
开始迭代
for i = 1:maxgen
alpha = 1/i+alpha0;
e = x*seta+b-y;
mse = norm(e);
delta_seta = e'*x;
delta_seta_norm = norm(delta_seta);
b = b-alpha*sum(e);
seta = seta-alpha*delta_seta;
disp(strcat('迭代次数:',num2str(i)));
disp(strcat('梯度:',num2str(delta_seta_norm),';seta:',num2str(seta),';b:',num2str(b),';mse:',num2str(mse)))
disp(strcat('alpha:',num2str(alpha),';sum(e):',num2str(sum(e))))
end
程序运行结果:
本文详细介绍了如何使用线性回归模型预测数据,并通过梯度下降法来优化模型参数,实现最小化损失函数的目标。文章给出了具体的数学推导过程及MATLAB实现代码。
953

被折叠的 条评论
为什么被折叠?



