【发布时间】:2021-10-11 08:25:41
【问题描述】:
知道X是mx3矩阵,theta是3x1矩阵,我计算逻辑回归的代价函数如下:
h = sigmoid(theta'*X');
J = ((-y)*log(h)-(1-y)*log(1-h))/m;
grad(1) = (h'-y)'*X(:,1);
grad(2) = (h'-y)'*X(:,2);
grad(3) = (h'-y)'*X(:,3);
输出是附上的图片:
这显然不是正确的结果。
当我这样做时
h = sigmoid(X*theta);
J = ((-y)'*log(h)-(1-y)'*log(1-h))/m;
grad = (X'*(h - y))/m;
我得到了正确的结果:
对我来说,这两个代码是相同的 - 是的,我检查了第一个代码中的矩阵大小。
有人可以帮助我理解一个输入一个输入而另一个输出不同的情况吗?不知何故,第一个代码在 theta 值上付出了很多代价......
【问题讨论】:
-
这里的
y是什么?请edit您的问题将您的示例转换为minimal reproducible example,以便我们可以重现此结果。我敢肯定,通过调试,您会在某处看到转置的各个阶段在某处不再等效 - 尝试创建中间变量而不是内联进行所有数学运算,然后您可以确定差异发生的精确点。
标签: matlab machine-learning octave