吴恩达老师,机器学习系列课程 - 6.6 Advanced Optimization中出现了optimset和fminunch这两个函数。
定义一个可以计算代价函数的函数
function [jVal, gradient]=costFunction(theta)
jVal = (theta(1)-5)^2 + (theta(2)-5)^2;
gradient = zeros(2, 1);
gradient(1) = 2*(theta(1)-5);
gradient(2) = 2*(theta(2)-5);
end
jVal, gradient是函数返回的值。定义函数名为costFunction,传入参数为theta。
options=optimset('GradObj','on','MaxIter',100);
initialTheta = zeos(2, 1);
[optTheta, funtionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
optimset是matlab中的一个函数,主要设置一些options, 如options=optimset('GradObj','on','MaxIter',100);
的作用包括是否使用用户自定义的梯度下降公式(GradObj = ‘on’)以及迭代次数(MaxIter = ‘100’)。
fminunc的输出参数[x, fval, exitflag],其中第一个返回值x为上面function [jVal,gradient] = costFunction(theta);
中的第二个返回值gra, 第二个返回值fval返回的是costFunction函数的第一个返回值jVal 这个关系是理解fminunc的重点。 第三个返回值exitflag返回值为0或1,表示在theta点定义的Jval函数是否收敛。
fuminunc的输入参数(@costFunction, initialTheta, options):
- @costFunction :传入我们上面自己定义的函数
- initialTheta :该参数为一个 2x1矩阵(2个元素的列向量),该列向量为用户自定义梯度下降法的输出参数。使用前要预先初始化。
- options:我们上面设置的一些Options。