matlab - 逻辑回归成本函数

标签 matlab machine-learning octave

function [J, grad] = costFunction(theta, X, y)
m = length(y);
h = sigmoid(X*theta);
sh = sigmoid(h);
grad = (1/m)*X'*(sh - y);
J = (1/m)*sum(-y.*log(sh) - (1 - y).*log(1 - sh));

end

我正在尝试计算逻辑回归的成本函数。有人可以告诉我为什么这不准确吗?

enter image description here

更新:Sigmoid 函数

function g = sigmoid(z)

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

end

最佳答案

正如 Dan 所说,你的 costFunction 调用 sigmoid 两次。首先,它对 X*theta 执行 sigmoid 函数;然后它对 sigmoid(X*theta) 的结果再次执行 sigmoid 函数。因此,sh = sigmoid(sigmoid(X*theta))。您的成本函数应该只调用 sigmoid 函数一次。

请参阅下面的代码,我删除了 sh 变量,并在其他地方将其替换为 h 。这会导致 sigmoid 函数仅被调用一次。

function [J, grad] = costFunction(theta, X, y)
m = length(y);
h = sigmoid(X*theta);
grad = (1/m)*X'*(h - y);
J = (1/m)*sum(-y.*log(h) - (1 - y).*log(1 - h));

end

关于matlab - 逻辑回归成本函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33018333/

相关文章:

组内的 MATLAB 索引

matlab - 以更有效的方式生成矩阵

image-processing - 跟踪与人脸检测相关的人体 Blob

machine-learning - 是什么导致 Caffe 抛出总线错误

plot - Octave :LaTeX 抽动

java - 在 Octave 中导入 Java 类

matlab - 求解三角系统的特殊函数?

matlab - 将一个向量拆包成 k 个变量

machine-learning - Weka 中的标准化+每折叠特征选择

octave - 符号工具箱从符号名称中修剪最终的 "dot"