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