Help for linear regression

2 views (last 30 days)
b
b on 20 May 2012
Hi friends, I have a problem in finding the regression by gradient descent. I coded it.
My code is as shown;
x=[x1 x2 x3 x4 x5];
y=realoutput;
alpha=0.001;
m=length(y);
n=5;
theta_vec=zeros(5,1);
error=zeros(5,1);
itr=100;
for max_iter=1:itr
for j=1:n
sum_theta_vec=0;
for i=1:m
h_theta_v=0;
for inner_j=1:n
h_theta=(x.^i)*theta_vec;
h_theta_v=(h_theta * ones(1,n)).';
y_v= (y * ones(1,n)).';
end
sum_theta_vec= (sum_theta_vec + ((h_theta_v - y_v(i)) * x(:,inner_j).^i));
end
theta_vec=theta_vec(j) - (alpha* 1/m * sum_theta_vec);
end
theta_vec
end
But theta_vec occurs as NaN. Why? Can anybody help me?
Thank you very much.
  5 Comments
b
b on 20 May 2012
"inner_j=1:n" means that x values in the last equation take all rows and 1 column in for loop.
Walter Roberson
Walter Roberson on 21 May 2012
You did not code an assignment for "inner_j": you coded a "for" loop. The "for" loop ends after the calculation of y_v, and everything in that loop will be done "n" times. After the loop is finished, the loop index variable will have the value it was last assigned, so inner_j will be "n" not 1:n .

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 20 May 2012
You have m=length(y) . If y is empty then m would be 0. Then when you calculate theta_vec you have 1/m * sum_theta_vec and sum_theta_vec would be 0 because the "for i=1:m" loop would execute 0 times when m is 0. 1/0 * 0 will give you NaN.

More Answers (1)

b
b on 20 May 2012
The only thing is that; in the equation
sum_theta_vec= (sum_theta_vec + ((h_theta_v - y_v(i)) * x(:,inner_j).^i));
i want x to take different columns in each loop. for that purpose, i used inner_j.
But i think it can not take. How can i regulate this loop?

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!