前几天在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')
开始拟合
假设模型:
进行初始化
利用梯度下降算法,找到 θ