为了计算最佳θ,例如在逻辑回归中,我必须创建一个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?
中实现上述内容答案 0 :(得分:9)
查看optim
功能。它可以使用method = 'L-BFGS-B'
进行无约束最小化,您可以指定一个分析函数来计算渐变
EDIT。正如Ben指出的那样,fminunc
执行无约束优化,也可以使用optim
函数选择Nelder-Mead
或BFGS
来实现。此外,我还从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
的输出,试一试。