梯度下降法求解线性回归问题的matlab实现

本文主要给出批梯度下降法(BGD)与随机梯度下降法(SGD)的matlab实现,关于BGD与SGD的理论,可参考下文:
https://www.cnblogs.com/pinard/p/5970503.html

批梯度下降法(BGD)

// 批梯度下降法(BGD)
function [ theta,loss ] = BGD( x, y, alpha )
%批梯度下降
m=size(x,1);%记录样本总数
n=size(x,2);%记录样本特征数
xx=[ones(m,1),x];%将x前加入一列全1向量x0
theta=ones(n+1,1);%初始化参数theta
diff=xx*theta-y;
gradient=xx'*diff/m;%梯度方向

count=1;%记录运行次数
while all (abs(gradient)>0.00001)
    theta=theta-alpha*gradient;%待求解参数theta朝梯度下降方向变化
    diff=xx*theta-y;
    gradient=xx'*diff/m;%梯度更新
    count=count+1;
end

loss=(diff'*diff)/(2*m);%计算损失函数
  
end

随机梯度下降法(SGD)

// 随机梯度下降法(SGD)
function [ theta,loss ] = SGD( x,y,alpha )
%随机梯度下降
m=size(x,1);%记录样本总数
n=size(x,2);%记录样本特征数
xx=[ones(m,1),x];%将x前加入一列x0
theta=ones(n+1,1);%初始化参数theta

count=0;%记录循环次数
loop_max=10000;

while count<loop_max
    count=count+1;
    for i=1:m
        diff=xx(i,:)*theta-y(i);
        theta=theta-alpha*diff*xx(i,:)'/m;
    end
    gradient=xx'*(xx*theta-y)/m;
    if all (abs(gradient)<0.0001)
        break
    end
end

diff1=xx*theta-y;
loss=diff1'*diff1/(2*m);%计算损失函数

end

调用

// 调用
x=[1;2;3;4;5];
y=[1.1;2.5;3.4;4.5;5.6];
alpha=0.01;
[theta1,loss1 ] = BGD( x, y, alpha );
[theta2,loss2 ] = SGD( x, y, alpha );

输出
theta1=[0.1202;1.0099]; loss1=0.0048;
theta2=[0.1206,1.0996]; loss2=0.0048;

绘图
蓝色线为BGD结果,红色线为SGD
蓝色线为BGD结果,红色线为SGD。由于二者估计的theta很接近,表现在图形上为蓝色线与红色线几乎重合。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab是一种常用的编程语言,可用于求解复杂的数学问题和模拟大数据集。在多元线性回归问题中,可以使用Matlab梯度下降法求解最优解。 多元线性回归是一种统计分析方法,用于建立一个由多个自变量预测一个因变量的模型。在Matlab中,可以使用矩阵运算和向量化计算来实现梯度下降法。 首先,需要确定多元线性回归模型的参数和数据集。这个模型可以用以下公式表示: Y = Xβ + ε 其中,Y是因变量向量,X是自变量矩阵,β是模型参数向量,ε是随机误差向量。 然后,可以使用Matlab中的gradient函数来计算梯度向量和梯度下降步长,以更新模型参数。具体步骤包括: 1.初始化模型参数β和学习率α; 2.计算梯度向量grad和梯度下降步长delta; 3.更新参数β; 4.重复2和3直至达到收敛条件。 Matlab中的代码示例如下: %% 初始化模型参数 beta = randn(size(X,2),1); %% 设置学习率和收敛条件 alpha = 0.01; tol = 1e-5; %% 梯度下降法求解多元线性回归 while true % 计算梯度向量和梯度下降步长 grad = X'*(X*beta-Y); delta = -alpha*grad; % 更新参数 beta = beta + delta; % 判断是否收敛 if norm(delta) < tol break end end 最后,可以使用求解出的模型参数来预测新的因变量值。 综上所述,Matlab梯度下降法是一种有效的多元线性回归求解方法。它可以通过矩阵运算和向量化计算来提高计算效率和精度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值