0

我正在尝试在 Matlab 中编写 ML 算法。这些是我的不同功能:

sigmoid.m:

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

成本函数.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);

我不知道上面有没有足够的信息?如果没有,请告诉我添加额外信息。

4

1 回答 1

0

我更改了以下代码行:

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

到以下代码行:

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

并且问题解决了!和是矩阵y,使用以前的代码我有矩阵,但是使用新代码我有矩阵或标量数,问题就解决了!g100*1J=100*100J=1*1

于 2019-01-20T15:17:46.887 回答