fitgmdist

Подходящая смешанная гауссовская модель к данным

Описание

пример

GMModel = fitgmdist(X,k) возвращает Гауссову модель распределения смеси (GMModel) с k компоненты адаптированы к данным (X).

пример

GMModel = fitgmdist(X,k,Name,Value) возвращает Гауссову модель распределения смеси с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы.

Например, можно задать значение регуляризации или тип ковариации.

Примеры

свернуть все

Сгенерируйте данные из смеси двух двумерных Распределений Гаусса.

mu1 = [1 2];
Sigma1 = [2 0; 0 0.5];
mu2 = [-3 -5];
Sigma2 = [1 0;0 1];
rng(1); % For reproducibility
X = [mvnrnd(mu1,Sigma1,1000); mvnrnd(mu2,Sigma2,1000)];

Соответствуйте смешанной гауссовской модели. Укажите, что существует два компонента.

GMModel = fitgmdist(X,2);

Отобразите данные на графике по подходящим контурам смешанной гауссовской модели.

figure
y = [zeros(1000,1);ones(1000,1)];
h = gscatter(X(:,1),X(:,2),y);
hold on
gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(GMModel,[x0 y0]),x,y);
g = gca;
fcontour(gmPDF,[g.XLim g.YLim])
title('{\bf Scatter Plot and Fitted Gaussian Mixture Contours}')
legend(h,'Model 0','Model1')
hold off

Figure contains an axes. The axes with title {\bf Scatter Plot and Fitted Gaussian Mixture Contours} contains 3 objects of type line, functioncontour. These objects represent Model 0, Model1.

Сгенерируйте данные из смеси двух двумерных Распределений Гаусса. Создайте третий предиктор, который является суммой первых и вторых предикторов.

mu1 = [1 2];
Sigma1 = [1 0; 0 1];
mu2 = [3 4];
Sigma2 = [0.5 0; 0 0.5];
rng(3); % For reproducibility
X1 = [mvnrnd(mu1,Sigma1,100);mvnrnd(mu2,Sigma2,100)];
X = [X1,X1(:,1)+X1(:,2)];

Столбцы X линейно зависимы. Это может вызвать плохо обусловленные оценки ковариации.

Соответствуйте смешанной гауссовской модели к данным. Можно использовать try / catch операторы, чтобы помочь управлять сообщениями об ошибке.

rng(1); % Reset seed for common start values
try
    GMModel = fitgmdist(X,2)
catch exception
    disp('There was an error fitting the Gaussian mixture model')
    error = exception.message
end
There was an error fitting the Gaussian mixture model
error = 
'Ill-conditioned covariance created at iteration 3.'

Оценки ковариации плохо обусловлены. Следовательно, остановки оптимизации и ошибка появляются.

Соответствуйте смешанной гауссовской модели снова, но используйте регуляризацию.

rng(3); % Reset seed for common start values
GMModel = fitgmdist(X,2,'RegularizationValue',0.1)
GMModel = 

Gaussian mixture distribution with 2 components in 3 dimensions
Component 1:
Mixing proportion: 0.536725
Mean:    2.8831    3.9506    6.8338

Component 2:
Mixing proportion: 0.463275
Mean:    0.8813    1.9758    2.8571

В этом случае алгоритм сходится к решению из-за регуляризации.

Смешанные гауссовские модели требуют, чтобы вы задали много компонентов перед стать подходящим к данным. Для многих приложений это может затруднить, чтобы знать соответствующее количество компонентов. В этом примере показано, как исследовать данные и попытаться получить исходное предположение в количестве компонентов с помощью анализа главных компонентов.

Загрузите ирисовый набор данных Фишера.

load fisheriris
classes = unique(species)
classes = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Набор данных содержит три класса ирисовых разновидностей. Анализ продолжает, как будто это неизвестно.

Используйте анализ главных компонентов, чтобы уменьшать размерность данных к двум размерностям для визуализации.

[~,score] = pca(meas,'NumComponents',2);

Соответствуйте трем смешанным гауссовским моделям к данным путем определения 1, 2, и 3 компонента. Увеличьте число итераций оптимизации к 1000. Используйте запись через точку, чтобы сохранить итоговые оценки параметра. По умолчанию программное обеспечение соответствует полным и различным ковариациям для каждого компонента.

GMModels = cell(3,1); % Preallocation
options = statset('MaxIter',1000);
rng(1); % For reproducibility

for j = 1:3
    GMModels{j} = fitgmdist(score,j,'Options',options);
    fprintf('\n GM Mean for %i Component(s)\n',j)
    Mu = GMModels{j}.mu
end
 GM Mean for 1 Component(s)
Mu = 1×2
10-14 ×

    0.1044   -0.0429

 GM Mean for 2 Component(s)
Mu = 2×2

    1.3212   -0.0954
   -2.6424    0.1909

 GM Mean for 3 Component(s)
Mu = 3×2

    0.4856   -0.1287
    1.4484   -0.0904
   -2.6424    0.1909

GMModels массив ячеек, содержащий три, подходящий gmdistribution модели. Средние значения в этих трех моделях компонента отличаются, предполагая, что модель различает три ирисовых разновидности.

Постройте баллы по подходящим контурам смешанной гауссовской модели. Поскольку набор данных включает метки, используйте gscatter различать истинное количество компонентов.

figure
for j = 1:3
    subplot(2,2,j)
    h1 = gscatter(score(:,1),score(:,2),species);
    h = gca;
    hold on
    gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(GMModels{j},[x0 y0]),x,y);
    fcontour(gmPDF,[h.XLim h.YLim],'MeshDensity',100)
    title(sprintf('GM Model - %i Component(s)',j));
    xlabel('1st principal component');
    ylabel('2nd principal component');
    if(j ~= 3)
        legend off;
    end
    hold off
end
g = legend(h1);
g.Position = [0.7 0.25 0.1 0.1];

Figure contains 3 axes. Axes 1 with title GM Model - 1 Component(s) contains 4 objects of type line, functioncontour. These objects represent setosa, versicolor, virginica. Axes 2 with title GM Model - 2 Component(s) contains 4 objects of type line, functioncontour. These objects represent setosa, versicolor, virginica. Axes 3 with title GM Model - 3 Component(s) contains 4 objects of type line, functioncontour. These objects represent setosa, versicolor, virginica.

Трехкомпонентная смешанная гауссовская модель, в сочетании с PCA, похожа на него, различает три ирисовых разновидности.

Существуют другие опции, которые можно использовать, чтобы помочь выбрать соответствующее количество компонентов для смешанной гауссовской модели. Например,

  • Сравните многоуровневые модели с различными количествами компонентов с помощью информационных критериев, e.g., AIC или BIC.

  • Оцените количество кластеров с помощью evalclusters, который поддерживает, критерий Calinski-Harabasz и статистическая величина разрыва или другие критерии.

Смешанные гауссовские модели требуют, чтобы вы задали много компонентов перед стать подходящим к данным. Для многих приложений это может затруднить, чтобы знать соответствующее количество компонентов. Этот пример использует статистическую величину подгонки AIC, чтобы помочь вам предпочесть смешанную гауссовскую модель оптимальной подгонки различным количествам компонентов.

Сгенерируйте данные из смеси двух двумерных Распределений Гаусса.

mu1 = [1 1];
Sigma1 = [0.5 0; 0 0.5];
mu2 = [2 4];
Sigma2 = [0.2 0; 0 0.2];
rng(1);
X = [mvnrnd(mu1,Sigma1,1000);mvnrnd(mu2,Sigma2,1000)];

plot(X(:,1),X(:,2),'ko')
title('Scatter Plot')
xlim([min(X(:)) max(X(:))]) % Make axes have the same scale
ylim([min(X(:)) max(X(:))])

Figure contains an axes. The axes with title Scatter Plot contains an object of type line.

Если вы не знаете базовые значения параметров, графики рассеивания предлагает:

  • Существует два компонента.

  • Отклонения между кластерами отличаются.

  • Отклонение в кластерах является тем же самым.

  • В кластерах нет никакой ковариации.

Соответствуйте двухкомпонентной смешанной гауссовской модели. На основе контроля графика рассеивания укажите, что ковариационные матрицы являются диагональными. Распечатайте итоговую итерацию и статистическую величину логарифмической правдоподобности к Командному окну путем передачи statset структура как значение Options аргумент пары "имя-значение".

options = statset('Display','final');
GMModel = fitgmdist(X,2,'CovarianceType','diagonal','Options',options);
11 iterations, log-likelihood = -4787.38

GMModel подходящий gmdistribution модель.

Исследуйте AIC по различным количествам компонентов.

AIC = zeros(1,4);
GMModels = cell(1,4);
options = statset('MaxIter',500);
for k = 1:4
    GMModels{k} = fitgmdist(X,k,'Options',options,'CovarianceType','diagonal');
    AIC(k)= GMModels{k}.AIC;
end

[minAIC,numComponents] = min(AIC);
numComponents
numComponents = 2
BestModel = GMModels{numComponents}
BestModel = 

Gaussian mixture distribution with 2 components in 2 dimensions
Component 1:
Mixing proportion: 0.501719
Mean:    1.9824    4.0013

Component 2:
Mixing proportion: 0.498281
Mean:    0.9880    1.0511

Самый маленький AIC происходит, когда программное обеспечение соответствует двухкомпонентной смешанной гауссовской модели.

Оценки параметра смешанной гауссовской модели могут меняться в зависимости от различных начальных значений. В этом примере показано, как управлять начальными значениями, когда вы соответствуете смешанным гауссовским моделям с помощью fitgmdist.

Загрузите ирисовый набор данных Фишера. Используйте лепестковые длины и ширины как предикторы.

load fisheriris
X = meas(:,3:4);

Соответствуйте смешанной гауссовской модели к данным с помощью начальных значений по умолчанию. Существует три ирисовых разновидности, поэтому задайте k = 3 компонента.

rng(10); % For reproducibility
GMModel1 = fitgmdist(X,3);

По умолчанию, программное обеспечение:

  1. Реализует k-средних значений ++ Алгоритм для Инициализации, чтобы выбрать k = 3 начальных кластерных центра.

  2. Устанавливает начальные ковариационные матрицы как диагональ, где элемент (jJ) отклонение X(:,j).

  3. Обрабатывает начальные пропорции смешивания как универсальную форму.

Соответствуйте смешанной гауссовской модели путем соединения каждого наблюдения с его меткой.

y = ones(size(X,1),1);
y(strcmp(species,'setosa')) = 2;
y(strcmp(species,'virginica')) = 3;

GMModel2 = fitgmdist(X,3,'Start',y);

Соответствуйте смешанной гауссовской модели путем явного определения начальных средних значений, ковариационных матриц, и смешивания пропорций.

Mu = [1 1; 2 2; 3 3];
Sigma(:,:,1) = [1 1; 1 2];
Sigma(:,:,2) = 2*[1 1; 1 2];
Sigma(:,:,3) = 3*[1 1; 1 2];
PComponents = [1/2,1/4,1/4];
S = struct('mu',Mu,'Sigma',Sigma,'ComponentProportion',PComponents);

GMModel3 = fitgmdist(X,3,'Start',S);

Используйте gscatter построить точечную диаграмму, которая различает ирисовые разновидности. Для каждой модели постройте подходящие контуры смешанной гауссовской модели.

figure
subplot(2,2,1)
h = gscatter(X(:,1),X(:,2),species,[],'o',4);
haxis = gca;
xlim = haxis.XLim;
ylim = haxis.YLim;
d = (max([xlim ylim])-min([xlim ylim]))/1000;
[X1Grid,X2Grid] = meshgrid(xlim(1):d:xlim(2),ylim(1):d:ylim(2));
hold on
contour(X1Grid,X2Grid,reshape(pdf(GMModel1,[X1Grid(:) X2Grid(:)]),...
    size(X1Grid,1),size(X1Grid,2)),20)
uistack(h,'top')
title('{\bf Random Initial Values}');
xlabel('Sepal length');
ylabel('Sepal width');
legend off;
hold off
subplot(2,2,2)
h = gscatter(X(:,1),X(:,2),species,[],'o',4);
hold on
contour(X1Grid,X2Grid,reshape(pdf(GMModel2,[X1Grid(:) X2Grid(:)]),...
    size(X1Grid,1),size(X1Grid,2)),20)
uistack(h,'top')
title('{\bf Initial Values from Labels}');
xlabel('Sepal length');
ylabel('Sepal width');
legend off
hold off
subplot(2,2,3)
h = gscatter(X(:,1),X(:,2),species,[],'o',4);
hold on
contour(X1Grid,X2Grid,reshape(pdf(GMModel3,[X1Grid(:) X2Grid(:)]),...
    size(X1Grid,1),size(X1Grid,2)),20)
uistack(h,'top')
title('{\bf Initial Values from the Structure}');
xlabel('Sepal length');
ylabel('Sepal width');
legend('Location',[0.7,0.25,0.1,0.1]);
hold off

Figure contains 3 axes. Axes 1 with title {\bf Random Initial Values} contains 4 objects of type contour, line. These objects represent virginica, versicolor, setosa. Axes 2 with title {\bf Initial Values from Labels} contains 4 objects of type contour, line. These objects represent virginica, versicolor, setosa. Axes 3 with title {\bf Initial Values from the Structure} contains 4 objects of type contour, line. These objects represent virginica, versicolor, setosa.

Согласно контурам, GMModel2 кажется, предлагает небольшой trimodality, в то время как другие предлагают бимодальные распределения.

Отобразите предполагаемые средние значения компонента.

table(GMModel1.mu,GMModel2.mu,GMModel3.mu,'VariableNames',...
    {'Model1','Model2','Model3'})
ans=3×3 table
         Model1               Model2              Model3     
    _________________    ________________    ________________

    5.2115     2.0119    4.2857    1.3339    1.4604    0.2429
     1.461    0.24423     1.462     0.246    4.7509    1.4629
    4.6829     1.4429    5.5507    2.0316    5.0158    1.8592

GMModel2 кажется, отличает между ирисовыми разновидностями лучшее.

Входные параметры

свернуть все

Данные, к которым смешанная гауссовская модель является подходящей в виде числовой матрицы.

Строки X соответствуйте наблюдениям и столбцам X соответствуйте переменным. Количество наблюдений должно быть больше, чем каждое следующее: количество переменных и количество компонентов.

NaNs указывают на отсутствующие значения. Программное обеспечение удаляет строки X содержа по крайней мере один NaN перед подбором кривой, который уменьшает эффективный объем выборки.

Типы данных: single | double

Количество компонентов, чтобы использовать, когда подходящая смешанная гауссовская модель в виде положительного целого числа. Например, если вы задаете k = 3, затем программное обеспечение соответствует смешанной гауссовской модели тремя отличными средними значениями, матрицами ковариаций и пропорциями компонента к данным (X).

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'RegularizationValue',0.1,'CovarianceType','diagonal' задает значение параметров регуляризации 0,1 и соответствовать диагональным ковариационным матрицам.

Тип ковариационной матрицы, чтобы соответствовать к данным в виде разделенной запятой пары, состоящей из 'CovarianceType' и любой 'diagonal' или 'full'.

Если вы устанавливаете 'diagonal', затем программное обеспечение соответствует диагональным ковариационным матрицам. В этом случае программное обеспечение оценивает k*d параметры ковариации, где d количество столбцов в X (т.е. d = size(X,2)).

В противном случае программное обеспечение соответствует полным ковариационным матрицам. В этом случае программное обеспечение оценивает k*d*(d+1)/2 параметры ковариации.

Пример: 'CovarianceType','diagonal'

Итеративные опции оптимизации алгоритма EM в виде разделенной запятой пары, состоящей из 'Options' и a statset структура опций.

Эта таблица описывает доступные аргументы пары "имя-значение".

ИмяЗначение
'Display'

'final': Отобразите окончательный вывод.

'iter': Отобразите итеративный вывод к Командному окну для некоторых функций; в противном случае отобразите окончательный вывод.

'off': Не отображайте информацию об оптимизации.

'MaxIter'Положительное целое число, указывающее на максимальное количество итераций, позволено. Значением по умолчанию является 100
'TolFun'Положительная скалярная величина, указывающая на допуск завершения к значению функции логарифмической правдоподобности. Значением по умолчанию является 1e-6.

Пример: 'Options',statset('Display','final','MaxIter',1500,'TolFun',1e-5)

Допуск к апостериорным вероятностям в виде разделенной запятой пары, состоящей из ProbabilityTolerance и неотрицательное скалярное значение в области значений [0,1e-6].

В каждой итерации, после оценки апостериорных вероятностей, fitgmdist наборы любая апостериорная вероятность, которая не больше, чем значение допуска, чтобы обнулить. Используя ненулевой допуск может убыстриться fitgmdist.

Пример: 'ProbabilityTolerance',0.0000025

Типы данных: single | double

Значение параметров регуляризации в виде разделенной запятой пары, состоящей из 'RegularizationValue' и неотрицательный скаляр.

Установите RegularizationValue к маленькой положительной скалярной величине, чтобы гарантировать, что предполагаемые ковариационные матрицы положительны определенный.

Пример: 'RegularizationValue',0.01

Типы данных: single | double

Число раз, чтобы повторить алгоритм EM с помощью нового набора начальных значений в виде разделенной запятой пары, состоящей из 'Replicates' и положительное целое число.

Если Replicates больше 1то:

  • Аргумент пары "имя-значение" Start должен быть plus (значение по умолчанию) или randSample.

  • GMModel подгонка с самой большой логарифмической правдоподобностью.

Пример: 'Replicates',10

Типы данных: single | double

Отметьте указание, идентичны ли все ковариационные матрицы (т.е. соответствуйте объединенной оценке) в виде разделенной запятой пары, состоящей из 'SharedCovariance' и любое логическое значение false или true.

Если SharedCovariance true, затем весь k ковариационные матрицы равны, и количество параметров ковариации уменьшено масштаб на коэффициент k.

Метод установки начального значения в виде разделенной запятой пары, состоящей из 'Start' и 'randSample'плюс, вектор из целых чисел или массив структур.

Значение Start определяет начальные значения, требуемые стандартной программой оптимизации для каждого Гауссова параметра компонента — среднее значение, ковариация и смешивание пропорции. Эта таблица суммирует доступные параметры.

ЗначениеОписание
'randSample'Программное обеспечение выбирает k наблюдения от X наугад как начальные средние значения компонента. Смесительные пропорции универсальны. Начальные ковариационные матрицы для всех компонентов являются диагональными, где элемент j на диагонали отклонение X(:,j).
'plus'Программное обеспечение выбирает k наблюдения от X использование k - означает ++ алгоритм. Начальные пропорции смешивания универсальны. Начальные ковариационные матрицы для всех компонентов являются диагональными, где элемент j на диагонали отклонение X(:,j).
Вектор из целых чисел Вектор из длины n (количество наблюдений) содержащий исходное предположение индекса компонента для каждой точки. Таким образом, каждым элементом является целое число от 1 до k, который соответствует компоненту. Программное обеспечение собирает все наблюдения, соответствующие тому же компоненту, вычисляет средние значения, ковариации и смешивание пропорций для каждого, и устанавливает начальные значения к этим статистическим данным.
Массив структур

Предположим, что существует d переменные (т.е. d = size(X,2)). Массив структур, например, S, должен иметь три поля:

  • S.mu: k- d матрица, задающая начальное среднее значение каждого компонента

  • S.Sigma: Числовой массив, задающий ковариационную матрицу каждого компонента. Sigma одно из следующего:

    • d- d- k массив. Sigma(:,:,j) начальная ковариационная матрица j компонента.

    • 1- d- k массив. diag(Sigma(:,:,j)) начальная ковариационная матрица j компонента.

    • d- d матрица. Sigma начальная ковариационная матрица для всех компонентов.

    • 1- d вектор. diag(Sigma) начальная ковариационная матрица для всех компонентов.

  • S.ComponentProportion: 1- k вектор из скаляров, задающих начальные пропорции смешивания каждого компонента. Значение по умолчанию универсально.

Пример: 'Start',ones(n,1)

Типы данных: single | double | char | string | struct

Выходные аргументы

свернуть все

Подходящая смешанная гауссовская модель, возвращенная как gmdistribution модель.

Доступ к свойствам GMModel использование записи через точку. Например, отобразите AIC путем ввода GMModel.AIC.

Советы

fitgmdist может:

  • Сходитесь к решению, где один или несколько компонентов имеет плохо обусловленную или сингулярную ковариационную матрицу.

    Следующие проблемы могут привести к плохо обусловленной ковариационной матрице:

    • Количество размерностей ваших данных относительно высоко и существует недостаточно наблюдений.

    • Некоторые предикторы (переменные) ваших данных высоко коррелируются.

    • Некоторые или все функции дискретны.

    • Вы пытались соответствовать данным к слишком многим компонентам.

    В общем случае можно постараться не получать плохо обусловленные ковариационные матрицы при помощи одних из следующих мер предосторожности:

    • Предварительно обработайте свои данные, чтобы удалить коррелируемые функции.

    • Установите 'SharedCovariance' к true использовать равную ковариационную матрицу для каждого компонента.

    • Установите 'CovarianceType' к 'diagonal'.

    • Используйте 'RegularizationValue' добавить очень маленькое положительное число в диагональ каждой ковариационной матрицы.

    • Попробуйте другой набор начальных значений.

  • Пройдите через промежуточный шаг, где один или несколько компонентов имеет плохо обусловленную ковариационную матрицу. Попробуйте другой набор начальных значений, чтобы избежать этой проблемы, не изменяя ваши данные или модель.

Алгоритмы

свернуть все

Оптимизация вероятности смешанной гауссовской модели

Программное обеспечение оптимизирует вероятность смешанной гауссовской модели с помощью итеративного алгоритма Максимизации ожидания (EM).

fitgmdist подгонки GMMs к данным с помощью итеративного Expectation-Maximization (EM) алгоритм. Используя начальные значения для средних значений компонента, ковариационных матриц и смешивания пропорций, доходы алгоритма EM с помощью этих шагов.

  1. Для каждого наблюдения алгоритм вычисляет апостериорные вероятности членств компонента. Можно думать о результате как о n-by-k матрица, где элемент (i, j) содержит апостериорную вероятность, что наблюдение i от j компонента. Это - E - шаг алгоритма EM.

  2. Используя апостериорные вероятности членства компонента как веса, алгоритм оценивает средние значения компонента, ковариационные матрицы и смешивание пропорций путем применения наибольшего правдоподобия. Это - M - шаг алгоритма EM.

Алгоритм выполняет итерации по этим шагам до сходимости. Поверхность вероятности является комплексной, и алгоритм может сходиться к локальному оптимуму. Кроме того, получившийся локальный оптимум может зависеть от начальных условий. fitgmdist имеет несколько опций для выбора начальных условий, включая случайные присвоения компонента для наблюдений и k - средние значения ++ алгоритм.

k- ++ алгоритм для инициализации

k - средние значения ++ алгоритм использует эвристику, чтобы найти, что центроидные seed для k - означают кластеризироваться. fitgmdist может применить тот же принцип, чтобы инициализировать алгоритм EM при помощи k-средних значений ++ алгоритм, чтобы выбрать начальные значения параметров для подходящей смешанной гауссовской модели.

k - средние значения ++ алгоритм принимает, что количество кластеров является k и выбирает начальные значения параметров можно следующим образом.

  1. Выберите вероятность смеси компонента, чтобы быть универсальной вероятностью pi=1k, где i = 1..., k.

  2. Выберите ковариационные матрицы, чтобы быть диагональными и идентичными, где σi=diag(a1,a2,,ak) и aj=var(Xj).

  3. Выберите первый начальный центр компонента μ 1 однородно из всех точек данных в X.

  4. Выбрать центр j:

    1. Вычислите расстояния Mahalanobis от каждого наблюдения до каждого центроида и присвойте каждое наблюдение его самому близкому центроиду.

    2. Для m = 1..., n и p = 1..., j – 1, выбирают центроидный j наугад из X с вероятностью

      d2(xm,μp)h;xhΜpd2(xh,μp)

      где d(xm,μp) расстояние между наблюдением m и μp, и Mp является набором всех наблюдений, самых близких к центроидному μp, и xm принадлежит Mp.

      Таким образом, выберите каждый последующий центр с вероятностью, пропорциональной расстоянию от себя до самого близкого центра, который вы уже выбрали.

  5. Повторите шаг 4, пока центроиды k не будут выбраны.

Ссылки

[1] Маклахлан, G. и D. Кожица. Конечные модели смеси. Хобокен, NJ: John Wiley & Sons, Inc., 2000.

Введенный в R2014a