2014-10-21 20:59:55 +02:00
function [ J , grad ] = lrCostFunction ( theta , X , y , lambda )
2014-10-21 21:20:26 +02:00
% LRCOSTFUNCTION Compute cost and gradient for logistic regression with
2014-10-21 20:59:55 +02:00
% regularization
% J = LRCOSTFUNCTION ( theta , X , y , lambda ) computes the cost of using
% theta as the parameter for regularized logistic regression and the
2014-10-21 21:20:26 +02:00
% gradient of the cost w . r . t . to the parameters .
2014-10-21 20:59:55 +02:00
% Initialize some useful values
m = length ( y ) ; % number of training examples
2014-10-21 21:20:26 +02:00
% You need to return the following variables correctly
2014-10-21 20:59:55 +02:00
J = 0 ;
grad = zeros ( size ( theta ) ) ;
% === === === === === === === = YOUR CODE HERE === === === === === === === =
% Instructions : Compute the cost of a particular choice of theta .
% You should set J to the cost .
% Compute the partial derivatives and set grad to the partial
% derivatives of the cost w . r . t . each parameter in theta
%
% Hint : The computation of the cost function and gradients can be
% efficiently vectorized . For example , consider the computation
%
% sigmoid ( X * theta )
%
% Each row of the resulting matrix will contain the value of the
% prediction for that example . You can make use of this to vectorize
2014-10-21 21:20:26 +02:00
% the cost function and gradient computations .
2014-10-21 20:59:55 +02:00
%
2014-10-21 21:20:26 +02:00
J = 1 / m * ( - y ' * log ( sigmoid ( X * theta ) ) - ( 1 - y ) ' * log ( 1 - sigmoid ( X * theta ) ) ) . . .
+ lambda / ( 2 * m ) * theta ( 2 : end ) ' * theta ( 2 : end ) ;
% Hint : When computing the gradient of the regularized cost function ,
2014-10-21 20:59:55 +02:00
% there ' re many possible vectorized solutions , but one solution
% looks like :
% grad = ( unregularized gradient for logistic regression )
2014-10-21 21:20:26 +02:00
% temp = theta ;
% temp ( 1 ) = 0 ; % because we don ' t add anything for j = 0
2014-10-21 20:59:55 +02:00
% grad = grad + YOUR_CODE _HERE ( using the temp variable )
%
2014-10-21 21:20:26 +02:00
regularization_term = lambda / m * vertcat ( [ 0 ] , theta ( 2 : end ) ) ;
grad = 1 / m * X ' * ( sigmoid ( X * theta ) - y ) + regularization_term ;
2014-10-21 20:59:55 +02:00
% === === === === === === === === === === === === === === === === === === === === =
grad = grad ( : ) ;
end