Поставленная целевая функция должна возвращать скалярное значение - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь закодировать алгоритм ML в Matlab.Это мои разные функции:

sigmoid.m:

function g = sigmoid(z)
g = zeros(size(z));
g = 1 ./ (1+exp(z));

costFunction.m

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

m = length(y); % number of training examples
z = -X * theta;
g = sigmoid(z);
J = 1/m * ((-y * log(g)') - ((1 - y) * log(1 - g)'));

grad = zeros(size(theta'));
grad = (1/m) * (X' * (g - y));

ex2.m (Это основной файл моего проекта иЯ поставил относительные строки, я получаю это сообщение об ошибке)

options = optimset('GradObj', 'on', 'MaxIter', 400);

[theta, cost] = ...
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

Сообщение об ошибке:

Ошибка при использовании fminunc (строка 348) Поставляемая целевая функция должна возвращать скалярное значение.

Ошибка в ex2 (строка 97) fminunc (@ (t) (costFunction (t, X, y)), initial_theta, options);

Я не знаю, есть лидостаточно информации выше или нет?Если нет, дайте мне знать, чтобы добавить дополнительную информацию.

1 Ответ

0 голосов
/ 20 января 2019

Я изменил следующую строку кода:

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

На следующую строку кода:

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

И проблема решена!Матрицы y и g были 100*1, а с предыдущим кодом у меня была матрица J=100*100, но с новым кодом у меня есть матрица J=1*1 или скалярное число, и проблема решена!

...