为什么Logistic回归成本为负且不正确?

时间:2016-10-24 18:05:48

标签: matlab machine-learning logistic-regression gradient-descent

我正在Matlab中实现逻辑回归。数据被标准化(mean和std)。我明白,根据你的学习率,你可能会超过最佳点。但这并不意味着您的成本开始上升吗?在我的情况下,成本进入负值区域,我不明白为什么。

以下是标准(我认为?)成本和重量更新规则

function J = crossEntropyError(w, x, y)
  h = sigmoid(x*w);
  J = (-y'*log(h) - (1-y')*log(1-h));
end

体重更新:

function w = updateWeights(alpha, w, x, y)      
  h = sigmoid(x*w);
  gradient = x'*(h-y);
  w = w - alpha*gradient;
end

这就是我的成本,x轴是迭代: logistic regression cost

这没有任何意义。当命中0时,它是否应该自我纠正并向另一个方向前进?也就是说,因为导数指向最小值。我玩过学习率,这里设置为0.0001。但它没有区别,相同的模式。问题是什么?这里肯定有一些问题,但我无法找到它。

2 个答案:

答案 0 :(得分:2)

所以我意识到自己的错误,这很愚蠢。我正在使用一个数据集,其中标签不是布尔值(0或1),这导致上面的交叉熵错误。代码是正确的,但不适用于具有非布尔数据的标签。

我会删除这个问题,但我不希望我的帐户被屏蔽。也许它可以帮助某人?

答案 1 :(得分:0)

请尝试此费用功能

J = -1/(m)*sum(y.*log(sigmoid(x*w))+(1-y).*log(1-sigmoid(x*w);

作为

m = sieze(x)

gradient = zeros(size(theta)); 

 for i = 1:size(theta),
     gradient(i)= (1/m)*sum((sigmoid(X*theta)-y).*X(:,i));

 end;