【发布时间】:2016-10-13 22:24:38
【问题描述】:
我知道 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 输入......我该如何规避这个问题?我究竟做错了什么?感谢任何想提供帮助的人;)
【问题讨论】:
-
我的论文停留在非常相似的阶段。 ;)
-
为什么它不是一个有效的输入?一种规避问题的方法是编写自己的最小化函数,而不是使用内置的 matlabs....
-
你用
fminunc(@(param) two_var(param, data), param0 )给fminunc打电话了吗? -
是的...它告诉我“初始用户提供的目标函数评估失败。FMINUNC 无法继续。”
-
你的循环没有意义。看看
sumto发生了什么 - 在循环的每个步骤中,您都将c添加到它,然后再次计算变量ml(其在最终迭代中的值是您的函数将返回的值) .您可能应该完全摆脱循环,只需将矢量化操作应用于data。然后使用sum计算似然函数的值。