Matlab:来自Andrew Ng的机器学习课程的@(t)(costFunction(t,X,y))的含义

时间:2017-05-14 08:12:15

标签: matlab

我在MATLAB中有以下代码:

%  Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400);

%  Run fminunc to obtain the optimal theta
%  This function will return theta and the cost 
[theta, cost] = ...
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

我的导师已经解释了最小化功能:

  

要指定我们最小化的实际功能,我们使用"短手"   用于指定函数,例如@(t)(costFunction(t, X, y))。这个   创建一个带有参数t的函数,该函数调用costFunction。这个   允许我们将costFunction打包以便与fminunc一起使用。

我真的无法理解@(t)(costFunction(t, X, y)的含义。这两个t正在做什么?这是什么表达?

4 个答案:

答案 0 :(得分:3)

在Matlab中,这被称为匿名函数

采取以下一行:

f = @(t)( 10*t );

在这里,我们定义一个函数f,它接受​​一个参数t,并返回10*t。它可以被

使用
f(5) % returns 50

在您的情况下,您正在使用fminunc,它将一个函数作为其第一个参数,并使用一个参数来最小化。这可以使用

调用
X = 1; y = 1; % Defining variables which aren't passed into the costFunction
              % but which must exist for the next line to pass them as anything!
f = @(t)(costFunction(t, X, y)); % Explicitly define costFunction as a function of t alone
[theta, cost] = fminunc(f, 0, options); 

这可以通过先不定义f,然后只调用

来缩短
 [theta, cost] = fminunc(@(t)(costFunction(t, X, y)), 0, options); 

进一步阅读

答案 1 :(得分:2)

只是添加了Wolfie的回复。我也很困惑,并在这里问了一个类似的问题: Understanding fminunc arguments and anonymous functions, function handlers

这里的方法是其中之一。匿名函数(下面链接中的3个方法中的1个)解决的问题是求解器fminunc仅优化传递给它的函数中的一个参数。匿名函数@(t)(costFunction(t, X, y)是一个新函数,它只接受一个参数t,然后将此值传递给costFunction。您会注意到,在视频讲座中输入的内容只是@costFunction而且这很有效,因为costFunction只使用了一个参数theta

https://www.mathworks.com/help/optim/ug/passing-extra-parameters.html

答案 2 :(得分:1)

我也有同样的问题。多亏了Wolfie提供的理解paramterized and anonymous functions的链接,我才能够澄清我的疑问。也许,您一定已经找到了答案,但是正在为那些可能在不久的将来开发此查询的人再次说明。

比方说,我们要导出一个多项式,并找到其最小值/最大值。我们的代码是:

m = 5;
fun = @(x) x^2 + m; % function that takes one input: x, accepts 'm' as constant
x = derive(fun, 0); % fun passed as an argument

根据上面的代码,“ fun”是指向我们匿名函数f(x)=x^2 + m的句柄。它仅接受一个输入,即x。匿名函数的优点是,无需为它创建单独的程序。对于常数“ m”,它可以接受当前workspace中的任何值。

上面的代码可以缩短:

m = 5;
x = derive(@(x) x^2 + m, 0); % passed the anonymous function directly as argument

答案 3 :(得分:0)

我们的目标是找到全局最优值,所以我认为这里的功能是通过更改alpha值获得局部极小值并相互比较以查看哪个最优值。

要实现此目的,您可以使用值initial_theta初始化fminuc

  1. fminuc set t=initial_theta然后计算CostFunction(t,X,y),它等于CostFunction(initial_theta,X,y)。您将获得Cost以及渐变。

  2. fminuc将计算带有渐变和alpha的new_theta,然后设置t=new_theta并再次计算Cost和渐变。

  3. 它将像这样循环,直到找到局部最优值为止。

  4. 然后,它更改alpha的长度并重复上述操作以获得另一个最优值。最后,它将比较最佳选择并返回最佳选择。