gpt4 book ai didi

MATLABs 'fminsearch' 不同于 Octave 的 'fmincg'

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:01 24 4
gpt4 key购买 nike

我试图在 MATLAB 和 Octave 中的两个函数之间为一个简单的优化问题获得一致的答案。这是我的代码:

  options = optimset('MaxIter', 500 , 'Display', 'iter', 'MaxFunEvals', 1000);

objFunc = @(t) lrCostFunction(t,X,y);

[result1] = fminsearch(objFunc, theta, options);
[result2]= fmincg (objFunc, theta, options);

(请记住,X、y 和 theta 已在前面定义并且是正确的)。问题如下:当我使用 fmincg 在 MATLAB 中运行上面的代码时,(推荐 fminsearch),我得到了正确的答案。

但是,如果我注释掉 fmincg 并让我们运行 fminsearch,我将得不到任何转换。事实上,输出看起来像这样:

   491          893         0.692991         reflect
492 894 0.692991 reflect
493 895 0.692991 reflect
494 896 0.692991 reflect
495 897 0.692991 reflect
496 898 0.692991 reflect
497 899 0.692991 reflect
498 900 0.692991 reflect
499 901 0.692991 reflect
500 902 0.692991 reflect



Exiting: Maximum number of iterations has been exceeded
- increase MaxIter option.
Current function value: 0.692991

增加迭代次数并没有什么用。相反,当使用 fmincg 时,我看到它收敛了,它最终给了我正确的结果:

Iteration     1 | Cost: 2.802128e-001
Iteration 2 | Cost: 9.454389e-002
Iteration 3 | Cost: 5.704641e-002
Iteration 4 | Cost: 4.688190e-002
Iteration 5 | Cost: 3.759021e-002
Iteration 6 | Cost: 3.522008e-002
Iteration 7 | Cost: 3.234531e-002
Iteration 8 | Cost: 3.145034e-002
Iteration 9 | Cost: 3.008919e-002
Iteration 10 | Cost: 2.994639e-002
Iteration 11 | Cost: 2.678528e-002
Iteration 12 | Cost: 2.660323e-002
Iteration 13 | Cost: 2.493301e-002

.
.
.


Iteration 493 | Cost: 1.311466e-002
Iteration 494 | Cost: 1.311466e-002
Iteration 495 | Cost: 1.311466e-002
Iteration 496 | Cost: 1.311466e-002
Iteration 497 | Cost: 1.311466e-002
Iteration 498 | Cost: 1.311466e-002
Iteration 499 | Cost: 1.311466e-002
Iteration 500 | Cost: 1.311466e-002

这给出了正确的答案。

那么是什么给了?为什么 fminsearch 在这种最小化情况下不起作用?

附加上下文:

1) Octave 是具有 fmincg btw 的语言,但是快速的谷歌搜索结果也检索到此功能。我的 MATLAB 可以调用其中任何一个。

2)我的问题有一个凸误差面,它的误差面处处可微。

3) 我只能访问 fminsearch、fminbnd(我不能使用它,因为这个问题是多变量的而不是单变量的),所以剩下 fminsearch。谢谢!

最佳答案

我假设 fmincg 正在实现共轭梯度类型优化。 fminsearch 是一种无导数优化方法。那么,您为什么期望他们给出相同的结果。它们是完全不同的算法。

我希望 fminsearch 找到凸成本函数的全局最小值。至少,到目前为止,这是我的经验。

fminsearch 输出的第一行表明 objFunc(theta) 约为 0.69,但该值与 fmincg 输出中的成本值有很大不同。所以,我会在 fminsearch 之外寻找可能的错误。确保为两种算法提供相同的成本函数和初始点。

关于MATLABs 'fminsearch' 不同于 Octave 的 'fmincg',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10770934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com