在MATLAB theta1中实现的梯度下降搜索不正确

时间:2018-10-17 19:20:18

标签: matlab machine-learning linear-regression gradient-descent

我学习了吴安德教授教授的机器学习课程。 This is the link

我尝试实现本课程的第一项作业。 练习2:线性回归基于监督学习问题

1。使用alpha = 0.07的学习率来实现梯度下降。由于Matlab / Octave和Octave索引向量从1开始而不是从0开始,因此您可能会在Matlab / Octave中使用theta(1)和theta(2)代表theta0和theta1。

我写下了一个matlab代码来解决此问题:

clc
clear
close all

x = load('ex2x.dat');
y = load('ex2y.dat');
figure % open a new figure window
 plot(x, y, '*');
 ylabel('Height in meters')
 xlabel('Age in years')
m = length(y); % store the number of training examples
x = [ones(m, 1), x]; % Add a column of ones to x
theta = [0 0];
temp=0,temp2=0;
h=[];
alpha=0.07;n=2; %alpha=learning rate
for i=1:m
temp1=0;
for j=1:n
    h(j)=theta(j)*x(i,j);
    temp1=temp1+h(j);
end
temp=temp+(temp1-y(i));
temp2=temp2+((temp1-y(i))*(x(i,1)+x(i,2)));

end
theta(1)=theta(1)-(alpha*(1/m)*temp);
theta(2)=theta(2)-(alpha*(1/m)*temp2);

我得到了答案:

>> theta

theta =

0.0745    0.4545

Here, 0.0745 is exact answer but 2nd one is not accurate. 

实际答案

theta =

0.0745 0.3800

链接中提供了数据集。谁能帮我解决问题?

1 个答案:

答案 0 :(得分:0)

得到错误的结果是因为编写了很长的不必要的代码,这些代码很容易出现错误,这正是我们使用matlab的原因:

public static object HandleEnumViaReflection(object e)
{
   var openType = typeof(ColorConsumer<>);
   var typeToActivate = openType.MakeGenericType(new Type[]{ ColorType });
   var consumer = Activator.CreateInstance(typeToActivate, new object[]{ e });
   return consumer.InstanceColor;
}