2017-07-02 13 views
1

私にご負担ください。問題は最後です。私はfminuncがどのように呼び出されるかの違いを理解しようとしています。fminuncの引数と匿名関数の理解、関数ハンドラ

この質問は、彼のコースラ機械学習コースでAndrew Ng's Week 3の資料に由来しています。 私はこの質問から跳ね上がります。

Matlab: Meaning of @(t)(costFunction(t, X, y)) from Andrew Ng's Machine Learning classは、私は、引数

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

ユーザーwolfieの意味を理解しようとしています、短縮バージョンであるとして、それを示しました。なぜ誰かが表現そのものがそうでなければならない理由を説明できますか?

function [jVal, gradient] = costFunction(theta) 

運動がコードを提供機能のこのバージョンがあります:: ビデオ講義では、彼はこのプログラムファイルからcostFunction入力と出力のように与えられている

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

のような機能を実行しましたcostFunction(theta, X, y)

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

の代わりとして:

[theta, cost] = fminunc(@costFunction, initial_theta, options);それが呼ばれた理由匿名関数ことなく、第2の場合のように呼び出されfminuncはいなかったのはなぜ

は、それはありますか?

答えて

1

コスト関数は、入力として最適化するパラメータを持ち、最小化する関数値を返す必要があります。コスト関数はに被最適化されたパラメータ(複数可)以外の入力が必要な場合は、匿名関数形は、トリックを行います:

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

これは、あなたが余分な入力XYを渡すことができます最適化する以外にt。詳細については、Mathworksの this linkを参照してください。

+0

私は明らかにビデオ講義で示されたものが引数としてちょうどシータを持つcostFunctionでしたが、演習で提供されたものはcostFunction(theta、X、y)でした。あなたの答えはまだ正しい方向に私を指摘し、それはまだ正しいことがわかります。ソルバーfminuncは1つの引数しか取ることができませんが、2つ以上の関数を取りますので、ソルバーで最適化したい引数tを1つだけ取る無名関数を定義します。 – heretoinfinity