Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Machine learning 如何在八倍频中从Andrew Ng赋值写出代价函数公式?_Machine Learning_Octave_Logistic Regression_Gradient Descent - Fatal编程技术网

Machine learning 如何在八倍频中从Andrew Ng赋值写出代价函数公式?

Machine learning 如何在八倍频中从Andrew Ng赋值写出代价函数公式?,machine-learning,octave,logistic-regression,gradient-descent,Machine Learning,Octave,Logistic Regression,Gradient Descent,我的实现(见下文)给出了标量值3.18,这不是正确答案。该值应为0.693。我的代码与等式的偏差在哪里 以下是在倍频程中运行成本函数方法的数据的求解说明: data = load('ex2data1.txt'); X = data(:, [1, 2]); y = data(:, 3); [m, n] = size(X); X = [ones(m, 1) X]; initial_theta = zeros(n + 1, 1); [cost, grad] = costFunction(initial

我的实现(见下文)给出了标量值3.18,这不是正确答案。该值应为0.693。我的代码与等式的偏差在哪里

以下是在倍频程中运行成本函数方法的数据的求解说明:

data = load('ex2data1.txt');
X = data(:, [1, 2]); y = data(:, 3);
[m, n] = size(X);
X = [ones(m, 1) X];
initial_theta = zeros(n + 1, 1);
[cost, grad] = costFunction(initial_theta, X, y);
这里是
ex2data
上的链接,在这个包中有数据:

成本函数的公式为

以下是我正在使用的代码:

function [J, grad] = costFunction(theta, X, y)

m = length(y); % number of training examples

% You need to return the following variables correctly 
J = 0; %#ok<NASGU>
grad = zeros(size(theta)); %#ok<NASGU>

hx = sigmoid(X * theta)';
m = length(X);

J = sum(-y' * log(hx) - (1 - y')*log(1 - hx)) / m;

grad = X' * (hx - y) / m;

end

您的
sigmoid
功能不正确。传入的数据类型是向量,但您正在使用的操作正在执行矩阵除法。这需要以元素为基础

function g = sigmoid(z)
    g = 1.0 ./ (1.0 + exp(-z));
end
通过执行
1/A
,其中
A
是一个表达式,您实际上是在计算
A
,因为逆只存在于平方矩阵中,这将计算伪逆,这绝对不是您想要的

您可以在使用dot产品时保持大部分
costFunction
代码不变。我会去掉
,因为这意味着点积。我将用注释标记我的更改:

function [J, grad] = costFunction(theta, X, y)

m = length(y); % number of training examples

% You need to return the following variables correctly 
%J = 0; %#ok<NASGU> <-- Don't need to declare this as you'll create the variables later
%grad = zeros(size(theta)); %#ok<NASGU>

hx = sigmoid(X * theta);  % <-- Remove transpose
m = length(X);

J = (-y' * log(hx) - (1 - y')*log(1 - hx)) / m; % <-- Remove sum

grad = X' * (hx - y) / m;

end
function[J,grad]=costFunction(θ,X,y)
m=长度(y);%培训示例的数量
%您需要正确返回以下变量

%J=0;%#好的这是sigmoid函数的代码,我认为您在以下方面犯了错误:

function g = sigmoid(z)
   g = zeros(size(z));
   temp=1+exp(-1.*z);
   g=1./temp;
end


function [J, grad] = costFunction(theta, X, y)
   m = length(y); 
   J = 0;
   grad = zeros(size(theta));
   h=X*theta;
   xtemp=sigmoid(h);
   temp1=(-y'*log(xtemp));
   temp2=(1-y)'*log(1-xtemp);
   J=1/m*sum(temp1-temp2);
   grad=1/m*(X'*(xtemp-y));
end

我认为应该是(1-y)'如temp2=(1-y)所示

请也提供你的
sigmoid
函数。@rayryeng当然。你使用的是矩阵乘法(
*
),但你的方程中没有这些函数。试着改用元素乘法(
*
)。它是
(1-y)
还是
(1-y')
并不重要。关键是标量减法。您好,先生,谢谢您的回答,我的sigmoid函数缺少您定义为1的标量乘法。/代价函数的其余部分是正确的。您好,先生,谢谢您的回答,我的sigmoid函数缺少你定义为1的标量乘法。/代价函数的其余部分是正确的。当你问我关于S形函数的时候,我知道了,是的,我没有检查。再次非常感谢您,先生…我已经被困在这几天了。我还有另一个问题,为什么您说删除金额?在公式中,我们有所有迭代的总和吗?@irfan点积已经在为您计算这些项的总和。您不是对迭代进行求和,而是对训练示例的数量进行求和。迭代在该函数之外完成。要求两个向量的和,其中每个项相乘在一起,这就是点积的定义。基本真值向量和假设的和,它们的项相乘,已经由你所做的点积完成了。哦,绝对是的。。。我已经运行了迭代,是的,先生,它给出了相同的结果。非常感谢,先生。。
function g = sigmoid(z)
   g = zeros(size(z));
   temp=1+exp(-1.*z);
   g=1./temp;
end


function [J, grad] = costFunction(theta, X, y)
   m = length(y); 
   J = 0;
   grad = zeros(size(theta));
   h=X*theta;
   xtemp=sigmoid(h);
   temp1=(-y'*log(xtemp));
   temp2=(1-y)'*log(1-xtemp);
   J=1/m*sum(temp1-temp2);
   grad=1/m*(X'*(xtemp-y));
end