From 91178095376b04dc58b85a652552d860681bd513 Mon Sep 17 00:00:00 2001 From: neingeist Date: Tue, 21 Oct 2014 21:20:26 +0200 Subject: [PATCH] Vectorized regularized logistic regression, again --- ex3/lrCostFunction.m | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/ex3/lrCostFunction.m b/ex3/lrCostFunction.m index 3ddfbc5..458898d 100644 --- a/ex3/lrCostFunction.m +++ b/ex3/lrCostFunction.m @@ -1,14 +1,14 @@ 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 % J = LRCOSTFUNCTION(theta, X, y, lambda) computes the cost of using % 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 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; grad = zeros(size(theta)); @@ -25,25 +25,23 @@ grad = zeros(size(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 -% 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 % looks like: % grad = (unregularized gradient for logistic regression) -% temp = theta; -% temp(1) = 0; % because we don't add anything for j = 0 +% temp = theta; +% temp(1) = 0; % because we don't add anything for j = 0 % 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; % =============================================================