Функция fitgmdist MATLABs в одном измерении - PullRequest
0 голосов
/ 14 декабря 2018

Ранее я публиковал это в 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 измерении

Компонент 1: Пропорция смешивания: 0,294734 Среднее: 0,2417

Компонент 2: Пропорция смешивания: 0,152275 Означает: 41,9369

Компонент 3: Пропорция смешивания: 0,344658 Означает: 6,8231

Компонент 4: Смешиваниепропорция: 0,208333 Среднее: 24,6758

Очевидно, что рассчитанные средние значения гауссиан неверны. Где мой подход идет не так? Я считаю, что либо мой первый ввод в функцию fitgmdist должен как-то нормализоваться, либо мне нужно постобработать вывод.Пока что мои попытки не увенчались успехом.

1 Ответ

0 голосов
/ 15 декабря 2018

То, что происходит, - то, что модели смешивания дают вам средства гауссовых распределений отсчетов.Вместо ввода гистограммы в fitgmdist, вы должны ввести необработанные данные FSC_data.FSC_HF в первый аргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...