Ранее я публиковал это в Mathworks Community , но делаю репост здесь для более широкой аудитории ...
У меня есть одномерная гистограмма, к которой я хочу подойти гауссианцам:
![enter image description here](https://i.stack.imgur.com/nWjPO.png)
В приведенном выше примере мне нужно найти центры 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 измерении
Компонент 1: Пропорция смешивания: 0,294734 Среднее: 0,2417
Компонент 2: Пропорция смешивания: 0,152275 Означает: 41,9369
Компонент 3: Пропорция смешивания: 0,344658 Означает: 6,8231
Компонент 4: Смешиваниепропорция: 0,208333 Среднее: 24,6758
Очевидно, что рассчитанные средние значения гауссиан неверны. Где мой подход идет не так? Я считаю, что либо мой первый ввод в функцию fitgmdist
должен как-то нормализоваться, либо мне нужно постобработать вывод.Пока что мои попытки не увенчались успехом.