【发布时间】:2019-05-15 11:36:32
【问题描述】:
我之前曾在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 函数的第一个输入必须以某种方式进行标准化,要么我需要对输出进行后处理。到目前为止,我的尝试都失败了。
【问题讨论】:
-
如果你使用
histcounts而不是histogram,那么它会为你输出bin边缘(第二个输出),让生活更轻松!
标签: matlab curve-fitting gaussian