VLFeat - Documentation > vl_demo_gmm_convergence

# VLFeat.org

Documentation> vl_demo_gmm_convergence

# Source code for ``vl_demo_gmm_convergence.m

This file is located in the ``toolbox/demo folder in VLFeat package.

    dimension = 128;
    numData = 10000;
    numClusters = 100;
    numIterations = 5;
    numIterationsKM = 3;

    X = rand(dimension,numData);
    numTrials = 2;

    lls = zeros(numTrials,2);

    for trial = 1:numTrials
    % kmeans initialization
    startKMEANS = tic;
    [initMeans, assignments] = vl_kmeans(X, numClusters, ...
        'verbose', ...
        'multithreading', 'parallel', ...
        'algorithm','ann', ...
        'MaxNumIterations',numIterationsKM, ...
        'distance','l2', ...
        'NumTrees',3, ...
        'MaxNumComparisons', 5);
    elapsedKMEANS = toc(startKMEANS);
    fprintf('\n ---------- \n KMeans time - %f \n ---------- \n\n',elapsedKMEANS);

    % compute initial gaussian parameters
    initWeights = zeros(1,numClusters);
    initSigmas = zeros(dimension,numClusters);
    for i=1:numClusters
        Xk = X(:,assignments==i);

        initWeights(i) = size(Xk,2) / numClusters;

        if size(Xk,1) == 0 || size(Xk,2) == 0
            initSigmas(:,i) = diag(cov(X'));
        else
            initSigmas(:,i) = diag(cov(Xk'));
        end
    end

    % gmm with kmeans init
    [means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ...
        'initialization','custom', ...
        'InitMeans',initMeans, ...
        'InitSigmas',initSigmas, ...
        'InitWeights',initWeights, ...
        'verbose', ...
        'multithreading', 'parallel', ...
        'MaxNumIterations', numIterations);
    elapsedGMM = toc(startKMEANS);
    fprintf('\n ---------- \n GMM kmeans init time - %f \n ---------- \n\n',elapsedGMM);

    lls(trial,1) = ll;

    % gmm with random init
    elapsedGMM = tic;
    [means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ...
        'initialization','rand', ...
        'verbose', ...
        'multithreading', 'parallel', ...
        'MaxNumIterations', numIterations);
    elapsedGMM = toc(elapsedGMM);
    fprintf('\n ---------- \n GMM random init time - %f \n ---------- \n\n',elapsedGMM);

    lls(trial,2) = ll;

    end

    lls = sum(lls,1)/numTrials;
    inits = {'KMeans','Random'};
    disp(lls)

    figure
    bar(lls);
    set(gca,'xticklabel',inits);
    xlabel('Initialization type');
    ylabel('LogLikelyhood');
    title('GMM convergence test')