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在这里。我需要多少次迭代才能等于矩阵的长度或其他什么?
答案 0 :(得分:0)
function [J, grad] = costFunction(theta, X, y)
m = length(y);
J = 0;
grad = zeros(size(theta));
sig = 1./(1 + (exp(-(X * theta))));
J = ((-y' * log(sig)) - ((1 - y)' * log(1 - sig)))/m;
grad = ((sig - y)' * X)/m;
end
其中
sig = 1./(1 +(exp(-(X * theta)))))
是逻辑回归假设的矩阵表示,定义为:
其中,函数g是S型函数。乙状结肠功能定义为:
J =((-y'* log(sig))-((1-y)'* log(1-sig)))/ m;
是逻辑回归中成本函数的矩阵表示:
和
grad =((sig-y)'* X)/ m;
是成本梯度的矩阵表示,它是与θ长度相同的向量,其中第j个元素(对于j = 0,1,...,n)的定义如下: