1
0
Fork 0

Vectorized regularized logistic regression, again

master
neingeist 10 years ago
parent 326a924044
commit 9117809537

@ -1,14 +1,14 @@
function [J, grad] = lrCostFunction(theta, X, y, lambda) function [J, grad] = lrCostFunction(theta, X, y, lambda)
%LRCOSTFUNCTION Compute cost and gradient for logistic regression with %LRCOSTFUNCTION Compute cost and gradient for logistic regression with
%regularization %regularization
% J = LRCOSTFUNCTION(theta, X, y, lambda) computes the cost of using % J = LRCOSTFUNCTION(theta, X, y, lambda) computes the cost of using
% theta as the parameter for regularized logistic regression and the % theta as the parameter for regularized logistic regression and the
% gradient of the cost w.r.t. to the parameters. % gradient of the cost w.r.t. to the parameters.
% Initialize some useful values % Initialize some useful values
m = length(y); % number of training examples m = length(y); % number of training examples
% You need to return the following variables correctly % You need to return the following variables correctly
J = 0; J = 0;
grad = zeros(size(theta)); grad = zeros(size(theta));
@ -25,25 +25,23 @@ grad = zeros(size(theta));
% %
% Each row of the resulting matrix will contain the value of the % Each row of the resulting matrix will contain the value of the
% prediction for that example. You can make use of this to vectorize % prediction for that example. You can make use of this to vectorize
% the cost function and gradient computations. % the cost function and gradient computations.
% %
% Hint: When computing the gradient of the regularized cost function,
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,
% there're many possible vectorized solutions, but one solution % there're many possible vectorized solutions, but one solution
% looks like: % looks like:
% grad = (unregularized gradient for logistic regression) % grad = (unregularized gradient for logistic regression)
% temp = theta; % temp = theta;
% temp(1) = 0; % because we don't add anything for j = 0 % temp(1) = 0; % because we don't add anything for j = 0
% grad = grad + YOUR_CODE_HERE (using the temp variable) % grad = grad + YOUR_CODE_HERE (using the temp variable)
% %
regularization_term = lambda/m * vertcat([0], theta(2:end));
grad = 1/m * X' * (sigmoid(X*theta) - y) + regularization_term;
% ============================================================= % =============================================================