我正在学习Andrew Ng的机器学习课程,目前正在用MATLAB/Octave编写一个前向传播代码来解决这个成本函数:
目前,我已经用for循环的形式编写了代码,如下所示:
for i= 1:m for j= 1:num_labels J = J + log(ht(j,i))*y(j,i) + log(1-ht(j,i))*(1-y(j,i)); endendJ = -J/m;
这样可以完成任务。然而,我希望简化这段代码,因为在MATLAB中使用for循环时,我总觉得有点“脏”,我觉得应该可以使用向量化的形式。但由于有两个求和,for循环似乎是自然的选择。
回答:
以下这行代码应该可以得到与您上面循环代码相同的结果:
J = -sum(log(ht(:)).*y(:) + log(1-ht(:)).*(1-y(:)))/m;