在ex2的基础上多写一个costFunctionReg.m就可以运行ex_reg.m
里面的reg指正则化(regularization),是用来处理过拟合(overfitting)情况的
其实就是在代价函数后再多加一个(λ/2m)∑θ²
但是梯度函数里面grad(1)不加λ/m*θ(1)
costFunctionReg.m
function [J, grad] = costFunctionReg(theta, X, y, lambda)
%COSTFUNCTIONREG Compute cost and gradient for logistic regression with regularization
% J = COSTFUNCTIONREG(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
h=sigmoid(X*theta);
J=(-y'*log(h)-(1-y)'*log(1-h))/m+lambda*(sum(theta.*theta)-theta(1)^2)/(2*m);
grad(1)=(X(:,1))'*(h-y)/m;
n=size(theta);
for i = 2 : n
grad(i)=((X(:,i))'*(h-y))/m+lambda*theta(i)/m;
end
% =============================================================
end