fminunc 函數的用法


無約束最優化 fminunc

官方文檔

求無約束多變量函數的最小值

語法

x = fminunc(fun,x0)  % 最基本的用法,給定起始點求出局部最優解
x = fminunc(fun,x0,options) % 添加參數 options,指定一些如‘最優化方式’,‘迭代次數’等信息
x = fminunc(problem) % 用於求解問題矩陣
[x,fval] = fminunc(___) % 略
[x,fval,exitflag,output] = fminunc(___) % 略
[x,fval,exitflag,output,grad,hessian] = fminunc(___)  % 略

以求解logistic regression問題下的代價函數為例。

在運用梯度下降時,操作如下

\[\left\{ \begin{align} J(\theta) &= -\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\log(h_\theta(x)) + (1-y^{(i)})\log(1-h_\theta(x))) + \frac{\lambda}{2m}\sum_{j=1}^{n}\theta_j^2 \\ \theta_j &= \theta_j - \alpha * \frac{\part{J(\theta)}}{\part{\theta_j}} \end{align} \right. \]

運用fminunc函數不需要自定義梯度下降的求法,但需要為fminunc提供

  • 函數句柄

    % 實現定義 costFunction
    % function [J,grad] = costFunction(theta,X,y,lambda)
    %
    %
    % 創建句柄,自變量定為 t
    fun = @(t) costFunction(t,X,y,lambda);
    
  • 初始theta值

    % 對於簡單的Logistic Regression,只需要將theta矩陣全部置0即可
    % 需要提前將X添加 x0 屬性
    %
    %
    Init_theta = zeros(size(X,2),1);
    
  • 操作參數

    % options 中 'GradObj' 指定 fminunc 的求解最優化方式為 '梯度下降' , 'MaxIter' 指定迭代次數為400
    options = optimset('GradObj', 'on', 'MaxIter', 400);
    

運用fminuc

[theta, J, exit_flag] = ...
	fminunc(@(t)(costFunction(t, x, y, lambda)), initial_theta, options);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM