Настройте смешанные гауссовские модели

В этом примере показано, как решить, что лучшая смешанная гауссовская модель (GMM) соответствует путем корректировки количества компонентов и структуры ковариационной матрицы компонента.

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

load fisheriris
X = meas(:,3:4);
[n,p] = size(X);
rng(1) % For reproducibility

figure
plot(X(:,1),X(:,2),'.','MarkerSize',15)
title('Fisher''s Iris Data Set')
xlabel('Petal length (cm)')
ylabel('Petal width (cm)')

Figure contains an axes object. The axes object with title Fisher's Iris Data Set contains an object of type line.

Предположим, что k является количеством желаемых компонентов или кластеров, и Σ структура ковариации для всех компонентов. Выполните эти шаги, чтобы настроить GMM.

  1. Выберите (k,Σ) пара, и затем соответствует GMM использование выбранной спецификации параметра и целого набора данных.

  2. Оцените AIC и BIC.

  3. Повторите шаги 1 и 2, пока вы не исчерпаете все (k,Σ) пары интереса.

  4. Выберите подходящий GMM, который балансирует низкий AIC с простоты.

В данном примере выберите сетку значений для k, которые включают 2 и 3, и некоторые окружающие числа. Задайте весь доступный выбор для структуры ковариации. Если k слишком высок для набора данных, то предполагаемые ковариации компонента могут быть плохо обусловлены. Задайте, чтобы использовать регуляризацию, чтобы избежать плохо обусловленных ковариационных матриц. Увеличьте число итераций алгоритма EM к 10 000.

k = 1:5;
nK = numel(k);
Sigma = {'diagonal','full'};
nSigma = numel(Sigma);
SharedCovariance = {true,false};
SCtext = {'true','false'};
nSC = numel(SharedCovariance);
RegularizationValue = 0.01;
options = statset('MaxIter',10000);

Соответствуйте GMMs, использующему всю комбинацию параметра. Вычислите AIC и BIC для каждой подгонки. Отследите терминальное состояние сходимости каждой подгонки.

% Preallocation
gm = cell(nK,nSigma,nSC);         
aic = zeros(nK,nSigma,nSC);
bic = zeros(nK,nSigma,nSC);
converged = false(nK,nSigma,nSC);

% Fit all models
for m = 1:nSC
    for j = 1:nSigma
        for i = 1:nK
            gm{i,j,m} = fitgmdist(X,k(i),...
                'CovarianceType',Sigma{j},...
                'SharedCovariance',SharedCovariance{m},...
                'RegularizationValue',RegularizationValue,...
                'Options',options);
            aic(i,j,m) = gm{i,j,m}.AIC;
            bic(i,j,m) = gm{i,j,m}.BIC;
            converged(i,j,m) = gm{i,j,m}.Converged;
        end
    end
end

allConverge = (sum(converged(:)) == nK*nSigma*nSC)
allConverge = logical
   1

gm массив ячеек, содержащий весь подходящий gmdistribution объекты модели. Все подходящие экземпляры сходились.

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

figure
bar(reshape(aic,nK,nSigma*nSC))
title('AIC For Various $k$ and $\Sigma$ Choices','Interpreter','latex')
xlabel('$k$','Interpreter','Latex')
ylabel('AIC')
legend({'Diagonal-shared','Full-shared','Diagonal-unshared',...
    'Full-unshared'})

Figure contains an axes object. The axes object with title AIC For Various k and Sigma Choices contains 4 objects of type bar. These objects represent Diagonal-shared, Full-shared, Diagonal-unshared, Full-unshared.

figure
bar(reshape(bic,nK,nSigma*nSC))
title('BIC For Various $k$ and $\Sigma$ Choices','Interpreter','latex')
xlabel('$c$','Interpreter','Latex')
ylabel('BIC')
legend({'Diagonal-shared','Full-shared','Diagonal-unshared',...
    'Full-unshared'})

Figure contains an axes object. The axes object with title BIC For Various k and Sigma Choices contains 4 objects of type bar. These objects represent Diagonal-shared, Full-shared, Diagonal-unshared, Full-unshared.

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

Кластеризируйте обучающие данные с помощью модели оптимальной подгонки. Отобразите на графике кластеризованные данные и замещающие знаки компонента.

gmBest = gm{3,2,2};
clusterX = cluster(gmBest,X);
kGMM = gmBest.NumComponents;
d = 500;
x1 = linspace(min(X(:,1)) - 2,max(X(:,1)) + 2,d);
x2 = linspace(min(X(:,2)) - 2,max(X(:,2)) + 2,d);
[x1grid,x2grid] = meshgrid(x1,x2);
X0 = [x1grid(:) x2grid(:)];
mahalDist = mahal(gmBest,X0);
threshold = sqrt(chi2inv(0.99,2));

figure
h1 = gscatter(X(:,1),X(:,2),clusterX);
hold on
for j = 1:kGMM
    idx = mahalDist(:,j)<=threshold;
    Color = h1(j).Color*0.75 + -0.5*(h1(j).Color - 1);
    h2 = plot(X0(idx,1),X0(idx,2),'.','Color',Color,'MarkerSize',1);
    uistack(h2,'bottom')
end
plot(gmBest.mu(:,1),gmBest.mu(:,2),'kx','LineWidth',2,'MarkerSize',10)
title('Clustered Data and Component Structures')
xlabel('Petal length (cm)')
ylabel('Petal width (cm)')
legend(h1,'Cluster 1','Cluster 2','Cluster 3','Location','NorthWest')
hold off

Figure contains an axes object. The axes object with title Clustered Data and Component Structures contains 7 objects of type line. These objects represent Cluster 1, Cluster 2, Cluster 3.

Этот набор данных включает метки. Определите как хорошо gmBest кластеризирует данные путем сравнения каждого предсказания с истинными метками.

species = categorical(species);
Y = zeros(n,1);
Y(species == 'versicolor') = 1;
Y(species == 'virginica') = 2;
Y(species == 'setosa') = 3;

miscluster = Y ~= clusterX;
clusterError = sum(miscluster)/n
clusterError = 0.0800

Оптимальная подгонка группы GMM 8% наблюдений в неправильный кластер.

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

Смотрите также

| |

Похожие темы