簡體   English   中英

在pdlab中將pdf擬合到直方圖

[英]Fitting a pdf to an histogram in matlab

在Matlab中將pdf擬合到直方圖時,我遇到了麻煩。 我正在使用gmdistribution.fit,因為我的數據是多模式的。 這就是我所做的:

data=[0.35*randn(1,100000), 0.5*randn(1,100000)+5, 1*randn(1,100000)+3]'; %multimodal data
x=min(data):(max(data)-min(data))/10000:max(data);

%Normalized Histogram
[counts,edges]=histcounts(data,500, 'Normalization', 'pdf');
bw=edges(2)-edges(1);
centers=edges(1:end-1)+bw;
H = bar(centers,counts,'hist');
hold on

%Fitting with gmdistribution
rng default
obj=gmdistribution.fit(data,3,'Replicates',5);

%the PDF
PDF=zeros(1,length(x));
for i=1:obj.NumComponents
    k=obj.ComponentProportion(i);
    u=obj.mu(i);
    sigma=obj.Sigma(i);
    PDF=PDF+k*normpdf(x,u,sigma);    
end
PDF=PDF/trapz(x,PDF);  %normalization (just in case)
plot(x,PDF)

%Fitting with ksdensity (for comparison)
[PDF2,xi]=ksdensity(data,x);
plot(x,PDF2)

legend('Normalized Histogram','gmdistribution','ksdensity')

直方圖和PDF

如您所見,高斯混合不適合直方圖。 來自ksdensiti函數的PDF要好得多。 我也嘗試過只適合一個高斯。 如果運行相同的先前代碼,則使用data = [0.35 * randn(1,100000)]'; 和obj = gmdistribution.fit(data,1,'Replicates',5); 你得到以下

一個高斯的直方圖和PDF

同樣,來自gmdistribution的pdf不符合直方圖。 似乎問題在於數據生成中的縮放因子(0.35)。 我究竟做錯了什么?

gmdistribution對象的Sigma參數對應於協方差,但是, normpdf函數需要標准偏差。 通過在for循環中用normpdf(x,u,sqrt(sigma))替換normpdf(x,u,sigma)來解決該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM