This file is indexed.

/usr/share/octave/site/m/vlfeat/toolbox/demo/vl_demo_gmm_2d_twist.m is in octave-vlfeat 0.9.17+dfsg0-6+b1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
%% data init
numClusters = 30;
dimension = 2;
cc=hsv(numClusters);
X = [];

a = 0.9;
t = linspace(0,4*pi,numClusters);
x = a*(t.*cos(t));
y = a*(t.*sin(t));
mu = [x;y];

Ns = linspace(1,numClusters,numClusters) * 20;

for i=1:numClusters
    add = randn(dimension,Ns(i)) + repmat(mu(:,i),1,Ns(i));
    X = [X, add*50];
end
X = single(X);

%% KMeans
elapsedKMEANS = tic;
[initMeans, assignments] = vl_kmeans(X, numClusters, ...
    'Verbose', ...
    'Algorithm','ann', ...
    'MaxNumIterations',5, ...
    'Distance','l2', ...
    'NumTrees',3, ...
    'MaxNumComparisons', 20);
elapsedKMEANS = toc(elapsedKMEANS);
fprintf('\n ---------- \n KMeans time - %f \n ---------- \n\n',elapsedKMEANS);

initSigmas = zeros(dimension,numClusters);
initWeights = zeros(1,numClusters);

figure(1) ; clf ;
subplot(3,1,1) ; hold on ;
for i=1:numClusters
    Xk = X(:,assignments==i);

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

    plot(Xk(1,:),Xk(2,:),'.','color',cc(i,:));
    if size(Xk,1) == 0 || size(Xk,2) == 0
        initSigmas(:,i) = diag(cov(X'));
    else
        initSigmas(:,i) = diag(cov(Xk'));
    end
end
axis equal
set(gca,'xtick',[],'ytick',[]);
axis off
title('GMM: KMeans intialization');

initSigmas = single(initSigmas);
initWeights = single(initWeights);

%% GMM kmeans
elapsedGMM = tic ;
[means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ...
    'Initialization','custom', ...
    'InitMeans',initMeans, ...
    'InitCovariances',initSigmas, ...
    'InitPriors',initWeights, ...
    'verbose', ...
    'MaxNumIterations', 20);
elapsedGMM = toc(elapsedGMM);
fprintf('\n ---------- \n GMM time - %f \n ---------- \n',elapsedGMM);

subplot(3,1,2) ; hold on ;
[~,idx] = max(posteriors,[],1);
for i=1:numClusters
    plot(X(1,idx == i),X(2,idx == i),'.','color',cc(i,:));
    vl_plotframe([means(:,i)' sigmas(1,i) 0 sigmas(2,i)]);
end
title('GMM: Gaussian mixture - kmeans init');
set(gca,'xtick',[],'ytick',[]);
axis off
axis equal

%% GMM random
elapsedGMM = tic;
[means,sigmas,weights,ll,posteriors] = vl_gmm(X, numClusters, ...
    'Initialization','rand', ...
    'Verbose', ...
    'MaxNumIterations', 100);
elapsedGMM = toc(elapsedGMM);
fprintf('\n ---------- \n GMM time - %f \n ---------- \n',elapsedGMM);

subplot(3,1,3) ; hold on ;
[~,idx] = max(posteriors,[],1);
for i=1:numClusters
    plot(X(1,idx == i),X(2,idx == i),'.','color',cc(i,:));
    vl_plotframe([means(:,i)' sigmas(1,i) 0 sigmas(2,i)]);
end
title('GMM: Gaussian mixture - random init');
axis equal
set(gca,'xtick',[],'ytick',[]);
axis off
vl_demo_print('gmm_2d_shell',1.2);