2012-12-23 46 views
4

我需要爲我最新的研究項目做參數優化。我有一個算法,目前有5個參數(四個雙[0,1]和一個名義與三個值)。該算法使用這些參數來計算一些東西,然後我計算精度,調用& FMeasure。單次運行大約需要1.8秒。目前我正在通過0.1步長的每個參數,這大概顯示了全局最大值在哪裏。但我想找到準確的全球最大值。我研究過梯度下降,但我不知道如何將它應用於我的算法(如果甚至可能的話)。任何人都可以請我指導一下我將如何實現這樣的算法,因爲我對這類工作很陌生。真實世界參數優化

乾杯, 丹尼爾

+2

你可以計算出你的(雙)參數的梯度? –

+0

嗨,托馬斯。最近看看你的lib :)目前我的函數看起來像這樣:a1 * x1 + a2 * x2 + a3 * x3 = y和x4是一個閾值參數,用於過濾掉答案,其中y

+1

也許你應該看看基因搜索算法http://en.m.wikipedia.org/wiki/Genetic_algorithm。還有一些Java實現框架。 – Ralph

回答

3

你當然可以做的比格尋找更好的。

在應用像梯度下降這樣的算法之前,您必須確保您的參數空間不包含局部最大值,或者至少您的起點接近全局最大值,並且您的步長足夠適合將您帶到它。

在你的情況下,我會建議先繪製儘可能多的隨機樣本。這是探索參數空間比網格搜索更好的方法。一旦以這種方式收集足夠的數據,您就可以使用模式查找算法,如mean shift或其更快的衍生工具之一,或直接進行優化。由於您沒有參數空間的雅可比行列式,因此可以使用Broyden's method(它反覆地近似它)或secant method(如BFGS)。

此外,請參閱此相關的問題:How can I adjust parameters for image processing algorithm in an efficient way?

+0

thx唐爲您的答案。我看了一下相關的問題,並在此基礎上實施了爬山方法。可悲的是,事實證明,該函數有很多局部最大值(我認爲這是由於閾值)。我抽樣了很多隨機起點,到目前爲止,網格搜索給了我更好的結果。有沒有一種特殊的方式來處理具有大量本地最大值的函數? –