【问题标题】:Why does the Logistic Regression cost go negative and not correct?为什么逻辑回归成本变为负数且不正确?
【发布时间】:2017-03-06 14:26:54
【问题描述】:

我正在 Matlab 中实现逻辑回归。数据被标准化(平均值和标准差)。我知道根据您的学习率,您可能会超过最佳点。但这是否意味着您的成本开始上升?就我而言,成本进入负数区域,我不明白为什么。

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

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 轴是迭代:

这毫无意义。当打到0时,它不应该自我纠正并朝另一个方向走吗?也就是说,因为导数指向最小值。我玩过学习率,这里设置为很小的 0.0001。但这没有什么区别,同样的模式。有什么问题?这里肯定有什么问题,但我找不到。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 不需要删除。您的提示很有帮助!
    【解决方案2】:

    请试试这个代价函数

    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;
    

    【讨论】:

    • 我仍然得到相同的模式。如果用刚刚编写的代码绘制成本图,会是什么样子?
    • 添加更多迭代我认为她还没有
    • 她很困惑。在下面检查我的答案。干杯。
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2019-01-28
    • 1970-01-01
    • 2019-09-05
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多