mirror of
https://github.com/jlengrand/MachineLearningCoursera.git
synced 2026-03-10 15:51:17 +00:00
63 lines
2.1 KiB
Matlab
63 lines
2.1 KiB
Matlab
function [J, grad] = lrCostFunction(theta, X, y, lambda)
|
|
%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.
|
|
|
|
% Initialize some useful values
|
|
m = length(y); % number of training examples
|
|
|
|
% You need to return the following variables correctly
|
|
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
|
|
% the cost function and gradient computations.
|
|
%
|
|
% 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
|
|
% grad = grad + YOUR_CODE_HERE (using the temp variable)
|
|
%
|
|
|
|
% Calculating J
|
|
theta_t_x = X*theta;
|
|
h_theta = sigmoid(theta_t_x);
|
|
|
|
part_1 = -y'*log(h_theta);
|
|
part_2 = (1 - y)' * log(1 - h_theta);
|
|
part_3 = sum(theta(2:length(theta)).^2);
|
|
%part_3 = sum(theta(2:length(theta)).*theta(2:length(theta)));
|
|
|
|
J = ((1 / m) * sum(part_1 - part_2)) + ((lambda/(2*m)) * part_3);
|
|
|
|
% Calculating g
|
|
temp_1 = sigmoid(X*theta) - y;
|
|
temp_2 = repmat(temp_1, 1, size(X, 2));
|
|
|
|
theta_vector = (lambda/m) * theta;
|
|
theta_vector(1) = 0;
|
|
grad = (1/m * sum(X .* temp_2))' + theta_vector;
|
|
|
|
% =============================================================
|
|
|
|
grad = grad(:);
|
|
|
|
end
|