我在MachineLearning课程中做作业。 我正在用Octave编写程序。我需要使用以下公式制作实现梯度下降法进行逻辑回归的函数:
但是在计算了新的theta之后,成本函数变得更糟。怎么了? 那是我的代码:
function [J, grad] = costFunctionReg(theta, X, y, lambda, alpha, num_iters)
%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));
J_history = zeros(num_iters, 1);
% ====================== 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(Q) = 1/m SUMM ( -y log (h) - (1 - y) log (1 - h))
%disp (h);
J = (1/m) * sum(-y .* log(h) - (1-y) .* log(1-h)) + (1/(2*m)) * lambda * sum(theta.^2)
for iter = 1:num_iters
theta(1) = theta(1) - alpha * ((1/m) * sum(-y .* log(h) - (1-y) .* log(1-h)) * X(1) + lambda/m * theta(1));
theta(2) = theta(2) - alpha * ((1/m) * sum(-y .* log(h) - (1-y) .* log(1-h)) * X(2) + lambda/m * theta(2));
theta(3) = theta(3) - alpha * (1/m) * sum(-y .* log(h) - (1-y) .* log(1-h));
theta
J_history(iter) = costFunction(theta, X, y)
end
%costFunctionReg([0.01, 0.1, 0.02], X1(:, [1,2,3]), X(:,3), 0.002, 0.001, 10)
% =============================================================
end