Matlab中fminunc函數的意義 以及options函數的初級用法。
本文問題出自Stanford大學 Andrew Ng老師的機器學習week 3 Logistic Regression Model 中出現如下高級函數:
該過程涉及matlab兩個函數 fminunc 和options;
要清楚的了解這兩個算法如何使用,我們需要知道自定義函數的使用方法,以圖上的自定義函數function [jVal,gradient] = costFunction(theta) 為例。該自定義函數傳入一個theta參數(2x1)。並計算代價值(cost) jVal = jVal = (theta(1)-5)^2 + (theta(2)-5)^2; 和每次迭代的梯度值(gradient) gradient(1) = 2*(theta(1)-5); gradient(2) = 2*(theta(2)-5);
計算結束后返回兩個參數[jVal,gradient],注意這兩個參數位置尤為重要,第一個返回值為jval計算值(類似於y = f(x)中的y),第二個返回值為gradient(類似於y = a+bx中的a,b)在下面的fminunc函數格式定義中需要用到。
要使用fminunc函數的如下形式:[x,fval,exitflag] = fminunc(fun,x0,options);
該方法需要定義3個輸入參數fun,x0和options;我們以圖片的為例子進行fminunc用法的說明。
圖片中的第一個輸入參數fun 定義為 @costFunction 該“@”符號涉及句柄知識,在另一篇(http://blog.csdn.NET/gzp444280620/article/details/49252491)博文中有講到。
第二個輸入參數x0定義為 initialTheta 該參數為一個 2x1矩陣(2個元素的列向量)。該列向量為用戶自定義梯度下降法的輸出參數。使用前要預先初始化。
第三個輸入參數為options 該參數的的作用包括是否使用用戶自定義的梯度下降公式(GradObj)以及迭代次數(MaxIter)。
例子中使用了自定義的梯度下降公式(costFunction中的gradient返回值),並且把迭代次數設為迭代100次。 例: options = optimset('GradObj','on','MaxIter','100');
輸入參數定義完成后我們來看一下fminunc的輸出參數[x,fval,exitflag],其中第一個返回值x為上面function [jVal,gradient] = costFunction(theta)中的第二個返回值gra, 第二個返回值fval返回的是costFunction函數的第一個返回值jVal 這個關系是理解fminunc的重點。 第三個返回值exitflag返回值為0或1,表示在theta點定義的Jval函數是否收斂。
總結一下fminunc默認定義規格與自定義函數之間的對應關系:
原文地址:http://blog.csdn.net/gzp444280620/article/details/49272977