In [ ]:
% batch gradient descent example 
% in univariate linear regression
% 2017-03-24 jkang
% Matlab R2016b
%
% y = th0 + th1*x

In [1]:
%% Training
% data
mu = [2,3];
sigma = [1,1.5;1.5,3];
n_input = 100;
r = mvnrnd(mu,sigma,n_input);

xdata = [ones(1,100);r(:,1)']; % (feature) x (example), padded with ones
ydata = r(:,2)';

% parameters
theta = [0, 0];
max_iter = 30;
alpha = 0.01;

% update
MSE = @(x,y,theta) 1/(2*length(x))*sum((theta*xdata - ydata).^2);
for i = 1:max_iter
    theta = theta - alpha*(1/n_input)*(theta*xdata - ydata)*xdata';
    fprintf('MSE=%.4f\n',MSE(xdata,ydata,theta))
end


MSE=6.0381
MSE=5.3167
MSE=4.6881
MSE=4.1401
MSE=3.6626
MSE=3.2463
MSE=2.8835
MSE=2.5673
MSE=2.2917
MSE=2.0514
MSE=1.8420
MSE=1.6595
MSE=1.5004
MSE=1.3617
MSE=1.2408
MSE=1.1354
MSE=1.0435
MSE=0.9634
MSE=0.8936
MSE=0.8327
MSE=0.7796
MSE=0.7333
MSE=0.6929
MSE=0.6577
MSE=0.6270
MSE=0.6002
MSE=0.5768
MSE=0.5565
MSE=0.5387
MSE=0.5231

In [2]:
%% Plot
plot(xdata(2,:),ydata,'o')
hold on
plot(xdata(2,:),theta*xdata,'r-')
hold off