ошибка: 'y' не определено возле строки 8, столбец 12 ошибка: вызывается из computeCost в строке 8, столбец 3 - PullRequest
0 голосов
/ 25 ноября 2018
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

1 Ответ

0 голосов
/ 25 ноября 2018

Здесь происходят две вещи.Сначала вы определяете свою функцию динамически, а не в своем собственном файле;не знаю, почему вы бы предпочли это.

Во-вторых, после определения этой computeCost функции вы вызываете ее из контекста, в котором вы не передали аргумент y (или, по-видимому, вы этого не сделалипередайте ему any аргументов, и y окажется первым из них, обнаруженным как отсутствующий внутри функции).

Поскольку это функция стоимости, и ваш код подозрительно похож на код изКурс Эндрю Нга по машинному обучению на 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 ) (который сначала оценивает функцию, а не передает дескриптор функции в качестве аргумента).

По сути, вернитесь к коду, данному вамКонечно, или внимательно прочитайте заметки.Вы называете вещи неправильно.

...