## Wednesday, May 7, 2014

### Gradient Descent with Multiple Feature Algorithm

`````` function [theta, J_history] = gradientDescentMulti(X, y, theta, alpha, num_iters)
%  taking num_iters gradient steps with learning rate alpha
% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
% ====================== YOUR CODE HERE ======================
% Instructions: Perform a single gradient step on the parameter vector
%        theta.
%
% Hint: While debugging, it can be useful to print out the values
%    of the cost function (computeCostMulti) and gradient here.
%
%Vectorization Fundamental
%h(theta)X = summ(theta(j) * X(j)); where j = 0 .. n
% = transpose(theta) * X;
%where theta is a Vector
%theta = [theta(1)/theta(2)/theta(3)] .. column Vector
%X = [X(1)/X(2)/X(3)] ... column Vector
%Gradient Descent with Multiple Variables Formula
%theta(j) := theta(j) - alpha * 1/m * summ(h(theta)x(i) - y(i)).Xj(i)); where i = 0 ... n
%Xj(i) is Vector
%h(theta)x(i) = X*theta ... as it takes all the values
vectorMultiple = X' * (X*theta - y);
theta = theta - (alpha/m) * (vectorMultiple);
square = (X * theta - y).^2;
J_history(iter) = (1/(2*m))*sum(square);