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