2017-07-02 282 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