gpt4 book ai didi

machine-learning - ML - Octave - 正则化 Logistic 回归的梯度函数

转载 作者:行者123 更新时间:2023-11-30 09:06:10 25 4
gpt4 key购买 nike

我编写了这两个代码实现来计算正则化逻辑回归算法的梯度增量,输入是一个标量变量n1,表示值n +1,大小为 n+1 的列向量 theta,矩阵 X> 大小为 [m x (n+1)],列向量 y 大小为 m> 和一个标量因子 lambda

第一个代码计算成功,第二个代码输出错误结果。我相信这些实现都在做同样的事情,它们怎么会输出不同的结果?

%correct
tmp = zeros(n1, 1);
tmp(2:n1,:) = (lambda / m) * theta(2:n1);
grad = (1 / m) * (X' * (sigmoid(X * theta) - y)) + tmp;

%wrong
grad(1,:) = (1 / m) * (X(:,1)' * (sigmoid(X(:,1) * theta(1,:)) - y));
grad(2:n1,:) = (1 / m) * (X(:,2:n1)' * (sigmoid(X(:,2:n1) * theta(2:n1,:)) - y)) + ((lambda / m) * theta(2:n1));

其中sigmoid(z)返回g,如下所示:

g = zeros(size(z));
g = 1 ./ (1 + exp( -z ));

最佳答案

问题出在矩阵乘法上。

首先假设 m = 5 且 n1 = 5,这意味着 X 是一个 5*5 矩阵,theta 和 y 都是 5 个元素的向量。

现在,在第一种情况下,sigmoid 函数提供 5*5 矩阵,X 的逆矩阵也是 5*5。由于它是矩阵乘法,X' 的第一行与 g 的第一列相乘,这意味着您需要所有 g 值来计算第一行的梯度。

现在在第二种情况下,对于 grad 的第一行,sigmoid 函数也提供了一个 5*5 矩阵,但有所不同,因为现在 X 是一个 1*5 矩阵。这意味着矩阵乘法将提供不同的输出,因此结果也不同。

我希望现在一切都清楚了。

**之前,我在编写答案时假设 theta 和 y 是行向量,但在您的示例中,您已经明确提到您正在使用列向量。然而,矩阵乘法仍然是问题。如果你对矩阵乘法有清楚的了解,那么你就会很容易理解这个问题。

让我们从正确的方程开始,

( X * theta) - y = m*1 矩阵,因此 sigmoid 是 m*1 矩阵。

X' * sigmoid 是这里的主要部分,因为其他两项是标量,X' * sigmoid = m*1 矩阵,最后你的梯度是 m*1 矩阵。

如果仔细观察,grad(1,1) 取决于 X'(1,:) 和 sigmoid,并且您已经使用所有 theta 值计算了 sigmoid。因此,grad(1,1) 不仅取决于 theta(1),而且您不能简单地将 theta 替换为 theta(1) 在错误的情况下您在做什么。

关于machine-learning - ML - Octave - 正则化 Logistic 回归的梯度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com