matlab逻辑回归代价函数报错

问题描述:

代价函数:

function [jVal,gradient]=costFunc(theta)
%load data
fid=fopen('D:\graduate design\data\track2\training.txt');
temp=textscan(fid,'%f%f%f%f%f%f%f%f%f%f%f%f',1000000);
temp=cell2mat(temp);
X=temp(:,[8 9 7]);
y=temp(:,1);
X=X';
m=length(y);
hypothesis=sigmoid(theta'*X);
jVal=-1/m(sum(y.*log(sigmoid(theta'*X))+(1-y).*log(1-sigmoid(theta'*X))));
gradient=zeros(size(theta));
for j=1:size(theta)
gradient(j)=1/m*sum(hypothesis-y)*X(:,j);
end

    梯度下降:
    function [optTheta,functionVal,exitFlag]=gradientDescent()
options=optimset('GradObj','on','MaxIter',100);
initialTheta=zeros(3,1);
[optTheta,functionVal,exitFlag]=fminunc(@costFunc,initialTheta,options);

end

报错信息:

下标索引必须为正整数类型或逻辑类型。

出错 costFunc (line 11)
jVal=-1/m(sum(y.*log(sigmoid(theta'*X))+(1-y).*log(1-sigmoid(theta'*X))));

出错 fminunc (line 301)
[f,GRAD] = feval(funfcn{3},x,varargin{:});

出错 gradientDescent (line 4)
[optTheta,functionVal,exitFlag]=fminunc(@costFunc,initialTheta,options);

原因:
Failure in initial objective function evaluation. FMINUNC cannot continue.

第11行(-1/m) 和后面表达式之间的*丢了

确实。。
还有个问题啊,我的数据集是1000000*3的,gradient(j)=1/m*sum(hypothesis-y)*X(:,j); 这个需要逐行输入x而不是将1000000*3一次输入,应该怎么做呢?