我正在尝试在Matlab中编写ML算法。这些是我的不同功能:
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,选项);
我不知道上面是否有足够的信息?如果没有,请告知我以添加其他信息。
答案 0 :(得分:0)
我更改了以下代码行:
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
矩阵或标量数,并且问题已解决!