避免在逻辑压缩函数中出现无穷大

我在实现逻辑回归函数的一部分时,总是得到-inf的结果。我不确定为什么会这样,因为如果输出是1,那么log(1-1)就会变成-inf。

有什么想法吗?

% 根据X, Y, theta计算误差function error = empRisk(X,Y, theta)    n = length(X);    error = 0;    for i=1: n        y = Y(i,:);        x = X(i,:);        binLoss = classify(theta,x);        part1 = y-1;        part2 = log(1-binLoss);% -Inf if 1-1??        part3 = y*(log(binLoss));        error = error + ((part1*part2)-part3);    end    error = error*(1/n);end% 实现分类函数function value = classify(theta, x)    z = dot(theta,x);    result = (1/(1+exp(-z)));    % 根据结果输出0或1    if result >= 0.5        value = 1;    else        value = 0;    endend

这是empRisk应该计算的公式: enter image description here


回答:

你有一个概念上的问题。在讨论经验风险最小化时通常使用的损失函数是0-1损失,这基本上是当你的分类值等于目标值时为0,否则为1(并且你对训练样本进行平均)。

如果你在讨论逻辑损失,那完全是另一回事。在这种情况下,你不希望在你的classify()函数中使用最后的if语句。所以你应该返回result

经验风险损失(0-1损失)在theta上是非凸的,而逻辑损失在theta上是凸的,这是人们使用它的原因之一,因为即使在大问题中,计算上也可行找到正确的theta。对于经验风险损失则不是这样。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注