gpt4 book ai didi

MATLAB - 周期函数(角度)的最大似然

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:39 25 4
gpt4 key购买 nike

在 MATLAB 统计教程中有一节叫做“拟合更复杂的分布:两个法线的混合” http://www.mathworks.com/help/stats/examples/fitting-custom-univariate-distributions.html

pdf_normmixture = @(x,p,mu1,mu2,sigma1,sigma2) ...
p*normpdf(x,mu1,sigma1) + (1-p)*normpdf(x,mu2,sigma2);
lb = [0 -Inf -Inf 0 0];
ub = [1 Inf Inf Inf Inf];
start = [pStart muStart sigmaStart sigmaStart];
paramEsts = mle(x, 'pdf',pdf_normmixture, 'start',start, 'lower',lb, 'upper',ub)

我想应用相同的方法将两个或多个法线拟合到我拥有的单变量值集,但在周期域内。即,具有 0° 到 360° 值的角度链接在一起作为一个圆形范围。我不确定如何声明它以使 MATLAB 理解这种术语。

是否可以更改此实现以添加循环范围案例?

问候,伊格纳西奥

最佳答案

我正在使用 von Mises 分布 http://en.wikipedia.org/wiki/Von_Mises_distribution这被认为是包裹法线的近似值(请参阅“循环统计 S. Rao Jammalamadaka,A. SenGupta”中主题中的条件)。不幸的是,我没有 matlab 来测试它,但我认为代码正在运行。因此,如果近似是有效的,就可以做这样的事情:

主要功能:

% 你应该提供列向量 theta 0-2pi

n=size(theta,1);

mu=0;

k=1;

theParameters=[mu;k];
options = optimset('TolFun',0.01);
outputPar = fminsearch('ml',theParameters,options,n,theta);

机器学习函数

function mLike=ml(theParameters,n,theta)

mu=theParameters(1,1);
k=theParameters(2,1);

theSum=0;
for i=1:n
theSum=theSum+k*cos(theta(i,1)-mu);
end
mLike=-n*log(2*pi*besselj(0,k)) + theSum;
mLike=-mLike;

希望对你有所帮助! R 中还有一个工具箱可以处理这种估计 http://cran.r-project.org/web/packages/circular/circular.pdf .

如果您对 k 的正性有疑问,为了避免处理约束优化,请改为执行 k=exp(kk) 并估计 kk。

关于MATLAB - 周期函数(角度)的最大似然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com