我一开始写的是
h = X*theta;
J = 1 / 2*m * sum((h-y) .^ 2);
得到的结果是
我以为是没有给数据做normalization,于是
%avg_x = sum(X(:,2))/length(X);
%X = [ ones(length(X),1) ,(X(:,2) - avg_x) / (max(X(:,2)) - min(X(:,2)))];
%avg_y = sum(y)/length(y);
%y = (y-avg_y) / ( max(y) - min(y) );
但是发现结果还是不对,最后我才发现,原来是
J = 1 / 2*m * sum((h-y) .^ 2);
公式的计算顺序不对,导致m由分母变成了分子
然后就得到正确结果了。
分母部分一定要用( )括起来,保证运算顺序正确