exponenta event banner

Tune Gaussian Модели смесей

В этом примере показано, как определить наилучшую модель смеси Гаусса (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)');

Предположим, что k является числом требуемых компонентов или кластеров и$\Sigma$ является ковариационной структурой для всех компонентов. Выполните следующие действия для настройки GMM.

  1. Выберите $\Sigma$пару (k,), а затем поместите GMM, используя выбранную спецификацию параметров и весь набор данных.

  2. Оценка AIC и BIC.

  3. Повторяйте шаги 1 и 2 до тех пор, пока не будут исчерпаны все (k,) $\Sigma$интересующие пары.

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

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

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);

Подгоните модули GMM, используя все комбинации параметров. Вычислите 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;
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'});

Согласно значениям 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
h3 = 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

Этот набор данных включает метки. Определить, насколько хорошо 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 может назначать различные метки кластера для аналогичных компонентов.

См. также

| |

Связанные темы