Matlab的fminunc函数在R中对应的函数是什么?

12
为了计算最优的theta,例如在逻辑回归中,我需要创建一个成本函数(即要最小化的函数),然后将其传递给fminunc以获得最优的theta。如果可以计算costFunction的梯度,则可以使用“GradObj”选项将其设置为“on”。
options = optimset('GradObj','on');

请编写成本函数(costFunction),使其作为第二个输出参数返回X的梯度值g。

然后我会提供代码:

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

如何在R中实现上述功能,其中X是数据矩阵,y是响应。

3个回答

10

请看一下optim函数。它可以使用method='L-BFGS-B'进行无约束最小化,您还可以指定一个分析函数来计算梯度。

编辑:正如Ben正确指出的那样,fminunc可以进行无约束优化,也可以使用选择Nelder-MeadBFGSoptim函数实现。此外,我还从fminunc的文档中注意到它使用信任区域方法进行大规模优化。有一个R包trust,我相信它做的是同样的事情。 我建议看一下R的优化任务视图


2
我有点困惑,我以为楼主要求的是无约束优化,而你描述的是有约束优化……?(不过这也没那么重要,optim在任何情况下都是正确的答案。) - Ben Bolker
你是对的!出于某种原因,我假设他在询问无约束优化。我已经添加了一个编辑指向同样的问题。 - Ramnath

1
在R中,您可以使用函数nlminb进行受限制的优化!

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

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

0
你尝试过ucminf包中的ucminf函数吗?如果您的问题是无约束问题(在许多情况下,您可以轻松地将受约束问题转换为无约束问题),则ucminf与Matlab的fmincon非常相似。两者都使用信任区域类型监控。与依赖于内点算法的fmincon不同,ucminf基于拟牛顿类型的算法。但是,ucminf为您提供与fmincon相同类型的控制。从我的经验来看,ucminf在复制fmincon的输出方面表现良好,可以试试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接