Подбор Смешанной гауссовской модели к данным
возвращает Гауссову модель распределения смеси с дополнительными опциями, заданными одним или несколькими 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
Сгенерируйте данные из смеси двух двухмерных Гауссовых распределений. Создайте третий предиктор, который является суммой первого и второго предикторов.
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];
Трехкомпонентная смешанная гауссовская модель в сочетании с РСА выглядит так, как будто она различает три вида радужной оболочки глаза.
Существуют другие опции, которые можно использовать, чтобы помочь выбрать соответствующее количество компонентов для смешанной гауссовской модели. Для примера,
Сравните несколько моделей с различным количеством компонентов, используя информационные критерии, например, AIC или BIC.
Оцените количество кластеров, использующих evalclusters
, который поддерживает, критерий Калински-Харабаша и статистику разрывов или другие критерии.
Смешанные гауссовские модели перед подгонкой к данным необходимо задать несколько компонентов. Для многих приложений может оказаться трудным узнать соответствующее количество компонентов. Этот пример использует статистику АПК-подгонки, чтобы помочь вам выбрать наиболее подходящую Смешанную гауссовскую модель для меняющегося количества компонентов.
Сгенерируйте данные из смеси двух двухмерных Гауссовых распределений.
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(:))])
Предположим, что вы не знаете базовых значений параметров, графики поля точек предлагают:
Существует два компонента.
Отклонения между кластерами различаются.
Отклонение внутри кластеров одинаковая.
В кластерах нет ковариации.
Подбор двухкомпонентной Смешанной гауссовской модели. Основываясь на проверке графика поля точек, задайте, что ковариационные матрицы являются диагональными. Печать окончательной статистики итерации и логарифмической правдоподобности в Командное окно путем передачи 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);
По умолчанию программное обеспечение:
Реализует k-средних значений + + Алгоритм для Инициализации, чтобы выбрать k = 3 начальных центров кластера.
Устанавливает начальные ковариационные матрицы как диагональные, где элемент (j
, j
) - отклонение X(:,j)
.
Обрабатывает начальные пропорции смешивания как равномерные.
Подгонка Смешанной гауссовской модели путем соединения каждого наблюдения с его меткой.
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
По контурам GMModel2
по-видимому, предполагает небольшую тримодальность, в то время как другие предполагают бимодальные распределения.
Отобразите предполагаемые средства компонента.
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
соответствуют наблюдениям, и столбцы X
соответствуют переменным. Количество наблюдений должно быть больше каждого из следующих: количества переменных и количества компонентов.
NaN
s указывает отсутствующие значения. Программа удаляет строки X
содержит, по меньшей мере, один NaN
перед подбором кривой, которая уменьшает эффективный размер выборки.
Типы данных: single
| double
k
- Количество компонентовКоличество компонентов, используемых при подборе Смешанной гауссовской модели, заданное как положительное целое число. Для примера, если вы задаете k = 3
, затем программное обеспечение подходит для смешанной гауссовской модели с тремя различными средствами, ковариационными матрицами и пропорциями компонентов к данным (X
).
Типы данных: single
| double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'RegularizationValue',0.1,'CovarianceType','diagonal'
задает значение параметров регуляризации 0,1 и для соответствия диагональным ковариационным матрицам.'CovarianceType'
- Тип ковариационной матрицы'full'
(по умолчанию) | 'diagonal'
Тип ковариационной матрицы для соответствия данным, заданный как разделенная разделенными запятой парами, состоящая из 'CovarianceType'
и любой из них 'diagonal'
или 'full'
.
Если вы задаете 'diagonal'
, затем программное обеспечение подходит к диагональным ковариационным матрицам. В этом случае программное обеспечение оценивает k*d
ковариационные параметры, где d
количество столбцов в X
(т.е. d = size(X,2)
).
В противном случае программное обеспечение подходит к полным ковариационным матрицам. В этом случае программное обеспечение оценивает k*d*(d+1)/2
ковариационные параметры.
Пример: 'CovarianceType','diagonal'
'Options'
- Итерационные опции оптимизации алгоритма EMstatset
структура опцийИтерационные опции оптимизации алгоритма EM, заданные как разделенная разделенными запятой парами, состоящая из 'Options'
и statset
структура опций.
Эта таблица описывает доступные аргументы пары "имя-значение".
Имя | Значение |
---|---|
'Display' |
|
'MaxIter' | Положительное целое число, указывающее на максимальное количество разрешенных итераций. Значение по умолчанию является 100 |
'TolFun' | Положительная скалярная величина, указывающий на допуск окончания для значения функции логарифмической правдоподобности. Значение по умолчанию является 1e-6 . |
Пример: 'Options',statset('Display','final','MaxIter',1500,'TolFun',1e-5)
'ProbabilityTolerance'
- Допуск для апостериорных вероятностей[0,1e-6]
Допуск для апостериорных вероятностей, заданный как разделенная разделенными запятой парами, состоящая из ProbabilityTolerance
и неотрицательное скалярное значение в области значений [0,1e-6]
.
В каждой итерации, после оценки апостериорных вероятностей, fitgmdist
устанавливает любую апостериорную вероятность, которая не больше значения допуска, равной нулю. Использование ненулевого допуска может ускориться fitgmdist
.
Пример: 'ProbabilityTolerance',0.0000025
Типы данных: single
| double
'RegularizationValue'
- значение параметров регуляризации0
(по умолчанию) | неотрицательной скаляромЗначение параметров регуляризации, заданное как разделенная разделенными запятой парами, состоящая из 'RegularizationValue'
и неотрицательный скаляр.
Задайте RegularizationValue
к небольшой положительной скалярной величине, чтобы убедиться, что предполагаемые ковариационные матрицы положительно определены.
Пример: 'RegularizationValue',0.01
Типы данных: single
| double
'Replicates'
- Количество раз, чтобы повторить алгоритм EM1
(по умолчанию) | положительное целое числоКоличество раз, чтобы повторить алгоритм EM с использованием нового набора начальных значений, заданных как разделенная разделенными запятой парами, состоящая из 'Replicates'
и положительное целое число.
Если Replicates
больше 1
, затем:
Область аргумента пары "имя-значение" Start
должен быть plus
(по умолчанию) или randSample
.
GMModel
- подгонка с наибольшей логарифмической правдоподобностью.
Пример: 'Replicates',10
Типы данных: single
| double
'SharedCovariance'
- Флаг, указывающий, являются ли все ковариационные матрицы идентичнымиfalse
(по умолчанию) | логический true
Флаг, указывающий, являются ли все ковариационные матрицы идентичными (то есть подходят для объединенной оценки), заданный как разделенная разделенными запятой парами, состоящая из 'SharedCovariance'
и любое логическое значение false
или true
.
Если SharedCovariance
является true
, затем все k
ковариационные матрицы равны, и количество ковариационных параметров масштабируется в множителе k
.
'Start'
- Метод установки начальных значений'plus'
(по умолчанию) | 'randSample'
| вектор целых чисел | массиве структурМетод установки начального значения, заданный как разделенная разделенными запятой парами, состоящая из 'Start'
и 'randSample'
, 'plus'
, вектор из целых чисел или массив структур.
Значение Start
определяет начальные значения, требуемые стандартной программой оптимизации для каждого параметра Гауссова компонента - среднего, ковариационного и смешивающей пропорции. В этой таблице представлены доступные опции.
Значение | Описание |
---|---|
'randSample' | Программа выбирает k наблюдения от X случайным образом в качестве начального средства компонента. Пропорции смешивания являются равномерными. Начальные ковариационные матрицы для всех компонентов диагональны, где элемент j на диагонали расположено отклонение X(:,j) . |
'plus' | Программа выбирает k наблюдения от X использование k алгоритма -means + +. Начальные пропорции смешивания являются равномерными. Начальные ковариационные матрицы для всех компонентов диагональны, где элемент j на диагонали расположено отклонение X(:,j) . |
Вектор целых чисел | Вектор длины n (количество наблюдений), содержащий начальное предположение индекса компонента для каждой точки. То есть каждый элемент является целым числом от 1 до k , что соответствует компоненту. Программа собирает все наблюдения, соответствующие одному и тому же компоненту, вычисляет средние значения, ковариации и пропорции смешения для каждого и устанавливает начальные значения для этой статистики. |
Массив структур |
Предположим, что есть
|
Пример: 'Start',ones(n,1)
Типы данных: single
| double
| char
| string
| struct
GMModel
- Модель установленной Гауссовой смесиgmdistribution
модельПодобранная Смешанная гауссовская модель, возвращенная как gmdistribution
модель.
Свойства доступа к GMModel
использование записи через точку. Для примера отобразите AIC путем ввода GMModel.AIC
.
fitgmdist
может:
Сходитесь к решению, где один или несколько компонентов имеют плохо обусловленную или сингулярную ковариационную матрицу.
Следующие проблемы могут привести к плохо обусловленной ковариационной матрице:
Количество размерностей ваших данных относительно велико, и наблюдений недостаточно.
Некоторые предикторы (переменные) ваших данных сильно коррелируют.
Некоторые или все функции являются дискретными.
Вы пытались подогнать данные к слишком большому количеству компонентов.
В целом можно избежать получения плохо обусловленных ковариационных матриц с помощью одной из следующих мер предосторожности:
Предварительно обработайте данные, чтобы удалить коррелированные функции.
Задайте 'SharedCovariance'
на true
использовать равную ковариационную матрицу для каждого компонента.
Задайте 'CovarianceType'
на 'diagonal'
.
Использование 'RegularizationValue'
добавить очень маленькое положительное число к диагонали каждой ковариационной матрицы.
Попробуйте другой набор начальных значений.
Пройти промежуточную стадию, где один или несколько компонентов имеют плохо обусловленную ковариационную матрицу. Попробуйте другой набор начальных значений, чтобы избежать этой проблемы, не изменяя свои данные или модель.
Программа оптимизирует вероятность Смешанной гауссовской модели с помощью итерационного алгоритма Ожидание-Максимизация (EM).
fitgmdist
подходит для GMM к данным с помощью итерационного алгоритма Expectation-Maximization (EM). Используя начальные значения для средств компонента, ковариационных матриц и пропорций смешения, алгоритм EM продолжает использовать эти шаги.
Для каждого наблюдения алгоритм вычисляет апостериорные вероятности членства компонента. Можно представить результат как n матрицу k, где элемент (i, j) содержит апостериорную вероятность того, что i наблюдений из j компонента. Это - E -степ алгоритма EM.
Используя апостериорные вероятности принадлежности к компоненту в качестве весов, алгоритм оценивает среднее значение компонента, ковариационные матрицы и смешивание пропорций путем применения максимальной вероятности. Это - M -степ алгоритма EM.
Алгоритм повторяет эти шаги до сходимости. Поверхность вероятности сложна, и алгоритм может сходиться к локальному оптимуму. Кроме того, полученный локальный оптимум может зависеть от начальных условий. fitgmdist
имеет несколько опции выбора начальных условий, включая случайные назначения компонентов для наблюдений и алгоритм k -means + + .
Алгоритм k -means + + использует эвристический метод для поиска семян центроидов для кластеризации k -means .fitgmdist
может применить тот же принцип для инициализации алгоритма EM с помощью алгоритма k-means + +, чтобы выбрать начальные значения параметров для подобранной смешанной гауссовской модели.
Алгоритм k -means + + принимает, что количество кластеров k, и выбирает начальные значения параметров следующим образом.
Выберите смесь компонентов, чтобы быть равномерной вероятностью , где i = 1,..., k.
Выберите ковариационные матрицы, чтобы быть диагональными и идентичными, где и .
Выберите первый начальный центр компонента, μ 1 равномерно из всех точек данных в X.
Чтобы выбрать центр j:
Вычислите расстояния Махаланобиса от каждого наблюдения до каждого центроида и присвойте каждое наблюдение своему ближайшему центроиду.
Для m = 1,..., n и p = 1,..., j - 1, выберите j центроида случайным образом из X с вероятностью
где является расстоянием между m наблюдений и μp, и Mp является набором всех наблюдений, ближайших к центроиду μp и xm принадлежит Mp.
То есть выберите каждый последующий центр с вероятностью, пропорциональной расстоянию от себя до ближайшего центра, который вы уже выбрали.
Повторите шаг 4, пока не будут выбраны k центроиды.
[1] McLachlan, G. и D. Peel. Модели конечной смеси. Hoboken, NJ: John Wiley & Sons, Inc., 2000.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.