一维的MATLAB fitgmdist函数

时间:2018-12-14 08:05:01

标签: matlab curve-fitting gaussian

我以前在Mathworks Community上发布了此内容,但现在在这里重新发布,以吸引更多的读者...

我有一个一维直方图,我想适合高斯:

enter image description here

在上面的示例中,我需要找到4个主要峰的中心,但是,峰数在不同的直方图中可能会有所不同。 以下是我的方法的MWE:

bins = 2000;
fsc_hist = histogram(FSC_data.FSC_HF,bins);hold on;
%% smooth data to get rid of discretization
fscValues = fsc_hist.Values;
binStep = (fsc_hist.BinLimits(2)-fsc_hist.BinLimits(1))/fsc_hist.NumBins;
binCenters =  binStep * [0:fsc_hist.NumBins-1];
smoothValues = smooth(binCenters, fscValues, 0.1, 'rloess');
%% fit GMM
expectedPeaks = 4;
gmm = fitgmdist(smoothValues, expectedPeaks, 'RegularizationValue', 0.1);

哪个返回以下GMM结果:

  

一维具有4个分量的高斯混合分布

     

组分1:混合比例:0.294734均值:0.2417

     

组分2:混合比例:0.152275平均值:41.9369

     

组分3:混合比例:0.344658平均值:6.8231

     

组分4:混合比例:0.208333平均值:24.6758

显然,所计算的高斯均值不正确。 我的方法哪里出了问题?我相信必须以某种方式对我对fitgmdist函数的第一个输入进行规范化,或者我需要对输出进行后处理。到目前为止,我的尝试失败了。

1 个答案:

答案 0 :(得分:1)

正在发生的是,混合模型为您提供了计数的高斯分布方式。不要将直方图输入到fitgmdist中,而应将原始FSC_data.FSC_HF数据输入到第一个参数中。