2017-07-02 88 views
1

請耐心等待。問題在最後。我試圖找出fminunc被調用的區別。瞭解fminunc參數和匿名函數,函數處理函數

這個問題源於Andrew Ng在Coursera機器學習課程中的第3周材料。 我正在反彈這個問題。 Matlab: Meaning of @(t)(costFunction(t, X, y)) from Andrew Ng's Machine Learning class

我想明白的說法

@(t) (costFunction(t, X, y)) 

用戶莫扎特的意義,顯示了它作爲一個縮短版。任何人都可以解釋爲什麼表達本身必須是這樣嗎?在視頻演講中,他跑出這樣

[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options) 

其中costFunction輸入和輸出從程序文件中給出的函數:

function [jVal, gradient] = costFunction(theta) 

的行使提供的代碼有這個版本的功能: costFunction(theta, X, y)

爲什麼沒有fminunc在第二種情況下叫不一樣的匿名函數,這就是爲什麼它被稱爲:

[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

,而不是爲:

[theta, cost] = fminunc(@costFunction, initial_theta, options);

回答

1

成本函數應該將參數優化爲輸入,並返回要最小化的函數值。如果成本函數需要比待優化的參數(S),匿名函數的形式將這樣的伎倆其他輸入:

funHandle = @(t) (costFunction(t, X, y)); 

這允許你通過額外的輸入Xÿ,除了待優化t。您可以從Mathworks查詢 this link瞭解更多信息。

+0

我編輯了這個問題,顯然視頻講座中顯示的是以theta作爲參數的cost函數,但練習中提供的是costFunction(theta,X,y)。你的回答仍然指向了正確的方向,我發現它仍然是正確的。求解器fminunc只需要一個參數,但我們有一個函數可以接受多個函數,所以我們定義一個匿名函數,它只需要一個參數t,我們希望用求解器進行優化。 – heretoinfinity