優化
通過邏輯映射施加 MLE 限制
我正在做一些具有隨時間變化的參數的密度的最大概似估計。我正在使用Matlab中的函式,但我不知道如何對參數向量施加限制。需要明確的是,我有一個參數向量(不隨時間變化),我知道如何對它們施加限制。但是我想讓兩個參數隨時間變化,但我不知道如何對包含這些隨時間變化的參數的向量施加限制。總結一下,我有一個包含幾個時不變參數的向量和兩個時變參數的向量。
fmincon
我發現一篇論文建議使用表單的邏輯映射 $ \Theta_{t, restricted} = L + \frac{(U-L)}{1+exp(-\Theta_t)} $ 在哪裡 $ \Theta_t = (x_1, x_2) $ U 和 L 分別是受限參數的上限和下限。 $ x_1, x_2 $ 是我要對其施加限制的時變參數。
對於將這個邏輯映射實現到我的優化問題中的任何幫助,我將不勝感激。
這是我建構的一個使用邏輯映射的 MLE。
%MLE iterator: for cxm = 1:cxmax for cxth = 1:wx; %thx %Incr. theta within asymptotic min and max. thi1 = thA1(cxth,1); mint = thA1(cxth,2); maxt = thA1(cxth,3); thix = -log((maxt - mint)/(thi1 - mint) - 1); %Logistic inverse. if rand > 0.5; signx = -1; else signx = 1; end expn = thix + 0.25 * signx / cxm; thi2 = mint + ((maxt - mint)/(1 + exp(-expn))); %Logistic. %Calc. change in log likelihood. thA2 = thA1; thA2(cxth,1) = thi2; %Constraint(s): thA2(wx+1:wx*2,1) = min(1,thA2(wx+1:wx*2,1) / sum(thA2(wx+1:wx*2,1))); [llk1] = llkF(rC,thA1,tx,wx); [llk2] = llkF(rC,thA2,tx,wx); %Calc. update. thA3 = thA1; expn = thix + 1 * ((llk2 - llk1) / (expn - thix)) / cxm; thA3(cxth,1) = mint + ((maxt - mint)/(1 + exp(-expn))); %Logistic. %Constraint(s): thA3(wx+1:wx*2,1) = min(1,thA3(wx+1:wx*2,1) / sum(thA3(wx+1:wx*2,1))); [llk3] = llkF(rC,thA3,tx,wx); %Update thA1 only if thA2 or thA3 is better. disp([llk1 llk2 llk3]); %<<<<<<<<<<<<<<<<<<<<<< if llk2 > llk1 && llk2 > llk3; thA1 = thA2; llk1 = llk2; end if llk3 > llk1 && llk3 > llk2; thA1 = thA3; llk1 = llk3; end end%theta loop. llkV(cxm) = llk1; %disp([' MLE: ', num2str(cxm),', ll = ',num2str(llk1)]) %Test for MLE convergence. if cxm > 5; d5llk = (llkV(cxm) - llkV(cxm - 5)); %Calc. change in llk, lag 5. if d5llk < 0.0001; llkV(cxm + 1:cxmax) = llkV(1); break; end; end%test end%MLE loop. llkV = llkV(1:cxm); %Truncate away the zeros. thA = thA1; %Reset theta array.