function [J, grad] = costFunction(theta, X, y)
data = load('ex2data1.txt');
y = data(:, 3);
theta = [1;1;2];
m = length(y);
one = ones(m,1);
X1 = data(:, [1, 2]);
X = [one X1];
J = 0;
grad = zeros(size(theta));
J= 1/m *((sum(-y*log(sigmoid(X*theta)))) - (sum(1-y * log(1 - sigmoid(X*theta)))));
for i = 1:m
grad = (1/m) * sum (sigmoid(X*theta) - y')*X;
end
end
我希望知道我是否正确实现了成本函数和梯度下降,虽然我得到了NaN的答案,但是theta(1)总是必须为0吗?我在这里将其设置为1。grad需要多少次迭代才能与矩阵的长度相等?
1-y
应该改为(1-y)
。此外,你的代码没有使用计算出的梯度更新 theta。最后,迭代次数是一个超参数,没有一个神奇的值,为了调试,请将其设置为一个大值(比如1000)。 - lejlottheta = theta - (alpha * grad);
- user3593450