错误:在第8行第12列附近未定义'y'错误:从第8行第3列的computeCost调用

时间:2018-11-25 08:35:19

标签: octave

error: 'y' undefined near line 8 column 12 
error: called from computeCost at line 8 column 3

这是我的代码:

1;
function J = computeCost(X, y, theta)
%COMPUTECOST Compute cost for linear regression
%   J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
%   parameter for linear regression to fit the data points in X and y

% Initialize some useful values
m = length(y); % number of training examples

% You need to return the following variables correctly 
J = 0;

% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
%               You should set J to the cost.

J = sum(( X * theta - y ) .^2 )/( 2 * m );



% =========================================================================

end

3 个答案:

答案 0 :(得分:1)

我猜这是Coursera ML课程分配中的错误。我认为您正在尝试运行包含函数computeCost(X,y,theta)的实现的文件,而不是调用具有X,y,theta值的computeCost(,,)函数的文件。这就是为什么在不提供y时出现错误的原因。

运行正在调用computeCost()函数的文件,而不是运行包含computeCost()函数的实现的文件。

即: 对于Week2作业1:运行ex1.m文件 对于Week3作业2:运行ex2.m文件

答案 1 :(得分:0)

这里发生了两件事。首先,您要动态定义函数,而不是在其自己的文件中定义;不确定为什么会喜欢。

第二,在定义此computeCost函数之后,您是在没有传递y自变量(或者大概没有传递 any 的参数,而y恰好是该函数中第一个被检测为缺少的参数。

由于这是一个成本函数,并且您的代码看起来像来自Andrewra Ng在Coursera上的机器学习课程中的代码,因此,我在这里走了个弯路,猜想您是从其他地方调用computeCost应该将其用作要优化的成本函数,例如fminunc。通常,像fminunc这样的函数都希望使用 函数句柄 作为参数,但是它们也希望使用非常特定的函数句柄。如果您查看help中的fminunc,它会指出:

  

FCN应该接受定义未知变量的向量(数组),
    并返回目标函数值(可选使用梯度)。

因此,如果要传递要使用三个参数计算的函数,则需要将其“包装”到您自己的句柄中,您可以在其中定义该句柄,例如@(x) computeCost(x, y, t)(假设“ y”和“ t”已经存在)。

所以,我猜测不是像这样调用fminunc:fminunc( @(x) computeCost(x, y, t)
您可能这样称呼它:fminunc( @computeCost )
甚至是这样:fminunc( computeCost )(它首先评估函数,而不是传递函数句柄作为参数)。

基本上,请返回到Coursera给您的代码,或者仔细阅读说明。您称呼错误的方式。

答案 2 :(得分:-1)

实际上,您正在尝试运行一个函数,只有提供所需的编号后才能运行它。参数。这样做,您可能会遇到以下错误:

computeCost错误:“ y”在第7行第12列附近未定义
错误:从computeCost在第7行第3列调用

如您所见,这里我在不传递任何参数的情况下调用此函数。

解决方案: 您可以通过运行“ ex1”脚本来测试代码。之后,通过调用“ submit”脚本提交您的作品。