我以前在Mathworks Community上发布了此内容,但现在在这里重新发布,以吸引更多的读者...
我有一个一维直方图,我想适合高斯:
在上面的示例中,我需要找到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
函数的第一个输入进行规范化,或者我需要对输出进行后处理。到目前为止,我的尝试失败了。
答案 0 :(得分:1)
正在发生的是,混合模型为您提供了计数的高斯分布方式。不要将直方图输入到fitgmdist中,而应将原始FSC_data.FSC_HF数据输入到第一个参数中。