Gradient Descent Matlab implementation
machine-learning, matlab
Solution
I have been trying to implement the iterative step with matrices and vectors (i.e not update each parameter of theta). Here is what I came up with (only the gradient step is here):
h = X * theta; # hypothesis
err = h - y; # error
gradient = alpha * (1 / m) * (X' * err); # update the gradient
theta = theta - gradient;
The hard part to grasp is that the "sum" in the gradient step of the previous examples is actually performed by the matrix multiplication `X'*err`. You can also write it as `(err'*X)'`
Problem
I have gone through many codes in stack overflow and made my own on same line. there is some problem with this code I am unable to understand. I am storing the value theta1 and theta 2 and also the cost function for analysis purpose. The data for x and Y can be downloaded from this Openclassroom page. It has x and Y data in form of .dat files that you can open in notepad. ``` %Single Variate Gradient Descent Algorithm%% clc clear all close all; % Step 1 Load x series/ Input data and Output data* y series x=load('D:\Office Docs_Jay\software\ex2x.dat'); y=load('D:\Office Docs_Jay\software\ex2y.dat'); %Plot the input vectors plot(x,y,'o'); ylabel('Height in meters'); xlabel('Age in years'); % Step 2 Add an extra column of ones in input vector [m n]=size(x); X=[ones(m,1) x];%Concatenate the ones column with x; % Step 3 Create Theta vector theta=zeros(n+1,1);%theta 0,1 % Create temporary values for storing summation temp1=0; temp2=0; % Define Learning Rate alpha and Max Iterations alpha=0.07; max_iterations=1; % Step 4 Iterate over loop for i=1:1:max_iterations %Calculate Hypothesis for all training example for k=1:1:m h(k)=theta(1,1)+theta(2,1)*X(k,2); %#ok<AGROW> temp1=temp1+(h(k)-y(k)); temp2=temp2+(h(k)-y(k))*X(k,2); end % Simultaneous Update tmp1=theta(1,1)-(alpha*1/(2*m)*temp1); tmp2=theta(2,1)-(alpha*(1/(2*m))*temp2); theta(1,1)=tmp1; theta(2,1)=tmp2; theta1_history(i)=theta(2,1); %#ok<AGROW> theta0_history(i)=theta(1,1); %#ok<AGROW> % Step 5 Calculate cost function tmp3=0; tmp4=0; for p=1:m tmp3=tmp3+theta(1,1)+theta(2,1)*X(p,1); tmp4=tmp4+theta(1,1)+theta(2,1)*X(p,2); end J1_theta0(i)=tmp3*(1/(2*m)); %#ok<AGROW> J2_theta1(i)=tmp4*(1/(2*m)); %#ok<AGROW> end theta hold on; plot(X(:,2),theta(1,1)+theta(2,1)*X); ``` I am getting the value of theta as 0.0373 and 0.1900 it should be 0.0745 and 0.3800 this value is approximately double that I am expecting.