[問題] 關於fminsearch和fminunc的問題已回收

看板MATLAB作者 (dada)時間16年前 (2010/01/20 20:01), 編輯推噓3(306)
留言9則, 2人參與, 最新討論串1/1
我想要用maximun likelihood的方式,估計binomial distribution的參數 因此,我寫了一個function,如下: function [ll]=nllgen(par,y,n) pl=par(1); ph=par(2); yl=y(1); yh=y(2); nl=n(1); nh=n(2); ll= -(yl*log(pl)+(nl-yl)*log(1-pl)+yh*log(ph)+(nh-yh)*log(1-ph)); 現在已知y和n,我要估計p1和p2 我用fminsearch做出的解法如下: y=[6 7] n=[20 13] [x, fval, exitflag, output]=fminsearch(@(par) nllgen(par,y,n),[0.5 0.5]) 得到結果par=[0.3000 0.5384] fval = 21.1897 此結果與書上的結果相符合!所以應該是正確寫法。 但是,因為fminsearch不能求得hessian矩陣,我查過網路,好像 fminunc可以求得,我就嘗試了以下作法: y=[6 7] n=[20 13] [x,fval,exitflag,output,grad,hessian]=fminunc(@(par) nllgen(par,y,n),[0.5 0.5]) 然而,雖然有跑出結果,但是此結果與前面的作法跑出結果大不相同 得到par= 1.0e+006 * -3.2488 -0.8968 且fval估出的結果也很奇怪。 照理說運用兩種方法,應該得到結果是相類似的,但是不知道為什麼結果差這麼多。 所以代表,我的fminunc方法可能有使用錯誤! 想請問各位,在這樣的情形之下,我必須要求得hessian 矩陣, 要怎麼正確的使用fminunc這個function? 謝謝各位! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.35.132.48 ※ 編輯: fredyang 來自: 114.35.132.48 (01/20 20:01) ※ 編輯: fredyang 來自: 114.35.132.48 (01/20 20:31) ※ 編輯: fredyang 來自: 114.35.132.48 (01/20 20:31) ※ 編輯: fredyang 來自: 114.35.132.48 (01/20 20:32)

01/20 21:21, , 1F
可能fminsearch疊帶跳到負數區域後就跳不回來了
01/20 21:21, 1F

01/20 21:32, , 2F
在nllgen.m 最後加上if (imag(ll)~=0.0) ll = 100;end 看看
01/20 21:32, 2F

01/20 21:54, , 3F
可以了ㄝ,太厲害了,所以原理是什麼啊?
01/20 21:54, 3F

01/21 11:56, , 4F
因為你要的應該是實數解吧...fminunc 中得到的也算是解...
01/21 11:56, 4F

01/21 11:57, , 5F
只是他得到的 f(par(1), par(2)) 是虛數...
01/21 11:57, 5F

01/21 12:11, , 6F
感謝!!
01/21 12:11, 6F

01/21 12:38, , 7F
另外 fminsearch fminunc 都有找到負數區, 可是 fminsearch
01/21 12:38, 7F

01/21 12:39, , 8F
最後會選擇得到時數解的 par(1) 跟 par(2), 可以找一下原因
01/21 12:39, 8F

01/21 12:39, , 9F
我看說明感覺兩者功能好像差不多....
01/21 12:39, 9F
文章代碼(AID): #1BLl26VE (MATLAB)