How to fix gradient descent code?
22 次查看(过去 30 天)
显示 更早的评论
I am a novice trying to do a gradient descent with one variable, but cannot figure out how to fix my code (below). Not sure if my for-part is correct. This is the error message: "In an assignment A(:) = B, the number of elements in A and B must be the same." Please help?
data = load('data.txt' );
X = data(:, 1); y = data(:, 2);
m = length(y);
X = [ones(m, 1), data(:,1)]; % Add a column of ones to x
theta = zeros(2, 1); % initialize fitting parameters
num_iters = 1500;
alpha = 0.01;
J = computeCost(X, y, theta)
m = length(y);
J = sum(( X * theta - y ) .^2 )/( 2 * m );
[theta J_history] = gradientDescent(X, y, theta, alpha, num_iters)
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
h=(theta(1)+ theta(2)*X)';
theta(1) = theta(1) - alpha * (1/m) * h * X(:, 1);
theta(2) = theta(2) - alpha * (1/m) * h * X(:, 2);
% Save the cost J in every iteration
J_history(num_iters) = computeCost(X, y, theta);
end
2 个评论
采纳的回答
Torsten
2016-3-30
theta(1) - alpha * (1/m) * h * X(:, 1)
and
theta(2) - alpha * (1/m) * h * X(:, 2)
are 2x1 vectors which are assigned to scalars in the lines
theta(1) = theta(1) - alpha * (1/m) * h * X(:, 1);
theta(2) = theta(2) - alpha * (1/m) * h * X(:, 2);
This is not possible.
Best wishes
Torsten.
3 个评论
Torsten
2016-3-30
I must admit that I don't understand what your code does.
To answer your question, you had to include comments and explain in more detail the underlying problem and the algorithm to solve it.
Best wishes
Torsten.
更多回答(2 个)
Torsten
2016-3-30
编辑:Torsten
2016-3-30
I don't know why you use such a complicated approach.
Just execute
data = load('data.txt' );
A = [ones(length(data(:,1)),1), data(:,1)];
b = data(:,2);
theta = A \ b
to get your optimum theta values.
Best wishes
Torsten.
14 个评论
Torsten
2016-3-31
You seem to have a strange MATLAB version.
If I set
num_iters=1001,
I get
theta =
5.2147549
- 0.5733459
J_history(1001)
ans =
0.8554026
thus the results expected.
Best wishes
Torsten.
Torsten
2016-3-31
I only need to supply the updates to theta within each iteration.
If you can't read from the code I supplied how theta is updated every iteration, then you should really start with MATLAB principles.
Agbakoba Chukwunoso
2020-12-6
Pls help me out.. I'm trying to find gradientdescent with this code but when I run it, it returns gradientdescents to me not the value . data = load('ex1data1.txt'); % text file conatins 2 values in each row separated by commas X = [ones(m, 1), data(:,1)]; theta = zeros(2, 1); iterations = 1500; alpha = 0.01; function [theta, J_history] = gradientdescent(X, y, theta, alpha, num_iters) m = length(y); % number of training examples J_history = zeros(num_iters, 1); for iter = 1:num_iters k=1:m; j1=(1/m)*sum((theta(1)+theta(2).*X(k,2))-y(k)) j2=(1/m)*sum(((theta(1)+theta(2).*X(k,2))-y(k)).*X(k,2)) theta(1)=theta(1)-alpha*(j1); theta(2)=theta(2)-alpha*(j2); end end
2 个评论
Agbakoba Chukwunoso
2020-12-6
data = load('ex1data1.txt');
% text file conatins 2 values in each row separated by commas
X = [ones(m, 1), data(:,1)];
theta = zeros(2, 1);
iterations = 1500;
alpha = 0.01;
function [theta, J_history] = gradientdescent(X, y, theta, alpha, num_iters)
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
k=1:m;
j1=(1/m)*sum((theta(1)+theta(2).*X(k,2))-y(k))
j2=(1/m)*sum(((theta(1)+theta(2).*X(k,2))-y(k)).*X(k,2))
theta(1)=theta(1)-alpha*(j1);
theta(2)=theta(2)-alpha*(j2);
end
end
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!