2016-06-13 12 views
1

MATLAB에는 최대 우도 추정을위한 패키지가 있지만 교육적 목적을 위해 나는 나 자신에게 다시 추정을 제공하는 알고리즘을 쓰고 있습니다. 자, 최소화하기 위해 노력하고있는 함수를 작성했습니다 (음의 로그 가능성을 사용하고 있기 때문에). 여기에 있습니다 :MATLAB에서 최대 우도 추정을위한 알고리즘 작성하기

function ml = two_var(param, data) 
mu = param(1); 
sigma = param(2); 
n=numel(data); 
sumto = 0; 
for i=1:n 
    c = data(i)- mu; 
    sumto = sumto + c; 
    ml = n/2*log(2*pi)+n/2*log(sigma^2)+1/(2*sigma^2)*sumto^2; 
end 

이 코드는 가우스 분포의 추정과 관련이 있습니다. 자, 문제는이 함수가 유효한 fminunc 입력이 아닌 것 같습니다 ... 어떻게 문제를 회피 할 수 있습니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까? 도움을 청하는 사람 덕분에)

+1

나의 논문은 꽤 비슷한 단계에 붙어있다. ;) –

+0

왜 이것이 유효한 입력이 아닌가요? 문제를 우회하는 방법은 matlabs inbuilt를 사용하는 대신 자신의 최소화 함수를 작성하는 것입니다. –

+0

fminunc (@ (param) two_var (param, data), param0)'와 함께 fminunc를 호출 했습니까? – Jommy

답변

0

질문에 도움을 준 모두에게 감사드립니다. 글쎄, 내 코드를 개선하기 위해 귀하의 모든 유용한 의견을 사용했습니다. 여기 내 최종 결과입니다.

function ml = t_var(param) 
rng default; 
data = random('norm',0,1,[400,1]); 
z = (data - param(1)) ./ param(2); 
L = -.5.*z.*z - log(sqrt(2.*pi).*param(2)); 
ml = -sum(numel(data).*L); 

이 코드는 의심 할 여지없이 읽기 쉽습니다. 또한 MATLAB에서 허용되는 빠른 벡터 연산을 사용합니다. 이 함수를 정의한 후에는

x0 =[0 0] 
[x,fval] = fminsearch(@t_var,x0,optimset('TolX',1e-19,'MaxFunEvals',1000,'MaxIter',1000)) 

과 같이 쉽게 호출 할 수 있습니다.

나에게 약간의 힌트를 준 모두에게 고마워! ;)