我们当然可以手动维护一个循环不断使用梯度下降算法更新theta,但是octave为我们提供了一个很好的库使得我们不必选取合适的学习速率,而可以直接调用一个叫fminunc的函数进行计算。
首先我们需要一个costfunction: function [J, grad] = costFunction(theta, X, y)
它返回两个值,一个是代价函数的值J,一个是计算好的梯度矩阵(n+1维,与theta同维)。
然后作如下准备:
options = optimset('GradObj', 'on', 'MaxIter', 迭代步数);
接下来就可以进行梯度下降算法的计算了
[theta, cost] = fminunc(@costFunction, initial theta, options);
返回的theta是最终的theta,cost是最终的cost。