梯度下降法的matlab代码,包括最小二乘法,梯度下降法的矩阵形式

包括单特征的样本的最小二乘法计算,
单特征样本的梯度下降法--代数版本
多特征样本的梯度下降--矩阵运算表示。
在矩阵表示的梯度下降法中运用标准差归一化(可选择注释)。
有比较详细的注释

clear;
clc;
X=[0,1,2,3,4,5,6];
Y=[0,1.1,2.2,2.7,4.1,4.9,5.6];
%最小二乘法
XY_ = mean(X.*Y);
X_Y_ = mean(X)*mean(Y);
X2_ = mean(X.*X);
X_2 = mean(X)*mean(X);
a=(XY_-X_Y_)/(X2_-X_2);
Y_ = mean(Y);
X_ = mean(X);
b=Y_-a*X_;
%显示,画图
% figure;
% scatter(X,Y);
% hold on;
% x=0:0.1:6;
% y=a*x+b;

%梯度下降法
a1 = 0;
b1 = 0;
s = 0.01;
delt = 0.01;
as = -XY_+a1*X2_+b*X_;
bs = -Y_+a1*X_+b1;
while abs(as)>delt || abs(bs)>delt
    a1 = a1-s*as;
    b1 = b1-s*bs;
    as = -XY_+a1*X2_+b*X_;
    bs = -Y_+a1*X_+b1;
end;
%显示,画图
% x1=0:0.1:6;
% y1=a1*x1+b1;
% plot(x,y,'r',x1,y1,'y');

%多维特征样本的矩阵梯度下降法

%y代表样本结果,它是一个m行,1列的矩阵,m代表样本数目
y=[0;1.1;2.2;2.7;4.1;4.9;5.6];

%x_ 代表样本训练输入数据,它是一个m行,n列的矩阵,m代表样本数目,n代表特征数目
%此时为单特征矩阵
x_=[0;1;2;3;4;5;6];
[m,n]=size(x_);

%在这一部分程序是对每个特征的数据进行标准差归一化,有助于设置步长,阈值等参数
%这样可以统一样本特征数据范围,使迭代次数加快
%那么对于使用最后的模型时,别忘记对输入值进行改变
% mean_x=mean(x_,1);%得到每个特征的均值
% std_x=std(x_,1);%得到每个特征的标准差
% mean_xx=repmat(mean_x,m,1);%扩展成矩阵
% std_xx=repmat(std_x,m,1);%扩展成矩阵
% x_=(x_-mean_xx)./std_xx;%标准差归一化


%训练数据增加一列特征,为了方便处理 截距参数
c=ones(m,1);
x=[x_ c];

%k 为参数向量,它是一个n+1列的矩阵,n是参数数目
k=zeros(n+1,1);

%线性假设函数为 Y=x*k
%那么损失函数为 f=0.5*(x*k-y)'*(x*k-y) ,'是转置
%对损失函数对k求偏导得 partial_Derivative = x'*(x*k-y)
partial_Derivative = x'*(x*k-y);
%设置步长step,随便设,但是过大会引起振荡,过小收敛速度太慢
step=0.001;
%设置收敛阈值 threshold
threshold = 0.01;
%获取偏微分绝对值
partial_Derivative_abs = abs(partial_Derivative);
%梯度下降距离
while max(max(partial_Derivative_abs))>threshold 
    k = k-partial_Derivative*step;
    partial_Derivative = x'*(x*k-y);
    partial_Derivative_abs = abs(partial_Derivative);
end;

%输出计算参数,用的都是单特征的样本数据

[a b]%最小二乘法直接计算
[a1 b1]%单特征梯度下降法代数法
[k']%多特征梯度下降法矩阵表示

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值