Java教程

2021-07-18梯度下降算法的简单案例(matlab)

本文主要是介绍2021-07-18梯度下降算法的简单案例(matlab),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前几天在scdn上学习了一个梯度下降的视频,以此记录一下

==题目==

 先大致画一下分布

training_data=[1 7.6;2 15.8;3 29;4 45;5 66.5;6 91;10 225];%样本

dataSize=length(training_data);
plot(training_data(:,1),training_data(:,2),'r*');
hold on;

 

完整的代码:

training_data=[1 7.6;2 15.8;3 29;4 45;5 66.5;6 91;10 225];%样本
maxIndex=2;  %θ最大下标
alpha=0.001;  %学习率
threshold=0.0001;  %误差中止变量
maxTime=5000;  %最大迭代次数

dataSize=length(training_data);
plot(training_data(:,1),training_data(:,2),'r*');
hold on;


%初始化
paraLen=maxIndex+1; %θ的个数
theta=zeros(paraLen,1);  %初始化θ都为0
theta0=theta;
times=0;  %初始化迭代次数
cost0=0;  %初始化第一次损失函数值
cost1=1;  %初始化第二次损失函数值

%终止条件:两次损失函数的差值小于阈值 , 循环次数
while abs(cost1-cost0)>threshold && times<maxTime
  theta0=theta;
  times=times+1;
  cost0=costFunction(theta',maxIndex,training_data);
  tmp=zeros(paraLen,1);
  
  for j=1:dataSize  %1-7
      %先考虑第一行
      X=zeros(paraLen,1);
      for k=1:paraLen
          X(k)=training_data(j,1)^(k-1);
      end
      for i=1:paraLen
          tmp(i)=tmp(i)+(theta0'*X-training_data(j,2))*X(i);
      end
  end
  
  %更新θ
  for i=1:paraLen
      tmp(i)=tmp(i)/dataSize;
      theta(i)=theta0(i)-alpha*tmp(i);
  end
  
  %更新后的cost
  cost1=costFunction(theta',maxIndex,training_data);
end

%验证:画hθ的拟合
X=0:0.01:10;
Y=X;
for i=1:length(X)
    Y(i)=theta'*[1;X(i);X(i)^2];
end
plot(X,Y,'b')

开始拟合

 假设模型:

进行初始化

利用梯度下降算法,找到 θ

这篇关于2021-07-18梯度下降算法的简单案例(matlab)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!