什么是Matlab的fminunc函数的R等价物?

时间:2011-10-27 18:32:02

标签: r matlab math mathematical-optimization

为了计算最佳θ,例如在逻辑回归中,我必须创建一个costFunction(要最小化的函数),然后将其传递给fminunc以获得最佳theta。 另外,如果可以计算costFunction的梯度,我使用

将'GradObj'选项设置为'on'
options = optimset('GradObj','on');

并对costFunction进行编码,以便它作为第二个输出参数返回X的梯度值g。 然后我给

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

其中X是数据矩阵,y是响应。如何在R?

中实现上述内容

3 个答案:

答案 0 :(得分:9)

查看optim功能。它可以使用method = 'L-BFGS-B'进行无约束最小化,您可以指定一个分析函数来计算渐变

EDIT。正如Ben指出的那样,fminunc执行无约束优化,也可以使用optim函数选择Nelder-MeadBFGS来实现。此外,我还从fminunc的文档中注意到,它使用trust区域方法进行大规模优化。我认为有一个R包trust做同样的事情。我建议您查看一下R的optimization task view

答案 1 :(得分:1)

在R中,您可以使用R中的函数nlminb进行约束优化!

nlminb(start, objective, gradient = NULL, hessian = NULL, ..., scale = 1, control = list(), lower = -Inf, upper = Inf)

开始是向量包括参数的所有初始值。 objective是成本函数或您想要最小化的任何其他函数。

答案 2 :(得分:0)

您是否尝试过 ucminf 包的 ucminf 功能?如果您的问题是不受约束的问题(并且在许多情况下,您可以轻松地将受约束的问题转换为不受约束的问题),那么 ucminf 与 Matlab 的 fmincon 非常相似。两者在使用信任区域类型监控的意义上是相似的。与 fmincon(依赖于内点算法)不同,ucminf 基于拟牛顿类型的算法。但是,usminf 为您提供了与 fmincon 相同类型的控件。根据我的经验,ucminf 非常擅长复制 fmincon 的输出,试一试。