-
Notifications
You must be signed in to change notification settings - Fork 3
/
RunExamples.m
166 lines (149 loc) · 6.18 KB
/
RunExamples.m
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
%
% This file runs several examples of diffusion maps
%
clear all;close all;clc
global X Data;
pExampleNames = { 'Circle', ...
'2-d sphere', ...
'Sphere and segment', ...
'Spiral and plane', ...
'Meyerstaircase', ...
'D-Cube with low sampling rate', ...
'S-Manifold', ...
'10-d cube with high noise', ...
'9-d sphere with high noise', ...
'Two lines and a plane', ...
'Isomap faces', ...
'CBCL faces, I', ...
'CBCL faces, II', ...
'Science News articles', ...
'MNIST digits', ...
'Patches from Lena Image', ...
'Anisotropic Diffusion on Circle'};
fprintf('\n\n Select example to run:\n');
for k = 1:length(pExampleNames),
fprintf('\n [%d] %s',k,pExampleNames{k});
end;
fprintf('\n\n ');
while true,
if (~exist('pExampleIdx') || isempty(pExampleIdx) || pExampleIdx==0),
try
pExampleIdx = input('');
pExampleIdx = str2num(pExampleIdx);
catch
end;
end;
if (pExampleIdx>=1) && (pExampleIdx<=length(pExampleNames)),
break;
else
fprintf('\n %d is not a valid Example. Please select a valid Example above.',pExampleIdx);
pExampleIdx=0;
end;
end;
%% Set parameters for constructing the graph
EstDimOpts = struct('NumberOfTrials',15,'verbose',0,'MAXDIM',100,'MAXAMBDIM',100,'Ptwise',false,'NetsOpts',[],'UseSmoothedS',false, 'EnlargeScales',true );
%% Set parameters for data generation and generates the data set
switch pExampleIdx
case 1
XName = 'D-Sphere'; XNickName = 'S';
XOpts = struct('NumberOfPoints',1000,'Dim',1,'EmbedDim',100,'NoiseType','Gaussian','NoiseParam',0.1/sqrt(100));
case 2
XName = 'D-Sphere'; XNickName = 'S';
XOpts = struct('NumberOfPoints',1000,'Dim',2,'EmbedDim',100,'NoiseType','Gaussian','NoiseParam',0.1);
case 3
XName = 'SphereAndLine'; XNickName = 'Sphere and Line';
XOpts = struct('Dim','2.5','NoiseType','Gaussian','NoiseParam',0.00);
EstDimOpts.Ptwise = true;
case 4
XName = 'SpiralAndPlane'; XNickName = 'Spiral and Plane';
XOpts = struct('NumberOfPoints',1100,'Dim','1.5');
EstDimOpts.Ptwise = true;
Labels=[ones(300,1);2*ones(800,1)];
case 5
XName = 'MeyerStaircase'; XNickName = 'Z';
XOpts = struct('NumberOfPoints',500,'Dim',1000,'MeyerStepWidth',20,'EmbedDim',1000,'NoiseType','Gaussian','NoiseParam',0.05/sqrt(1000));
case 6
XName = 'D-Cube'; XNickName = 'Q';
XOpts = struct('NumberOfPoints',250,'Dim',6,'EmbedDim',100,'NoiseType','Gaussian','NoiseParam',0.01/sqrt(100));
case 7
XName = 'S-Manifold'; XNickName = 'S';
XOpts = struct('NumberOfPoints',1000,'Dim',2,'EmbedDim',100,'NoiseType','Gaussian','NoiseParam',0.01);
case 8
XName = 'D-Cube'; XNickName = 'Q';
XOpts = struct('NumberOfPoints',1000,'Dim',10,'EmbedDim',100,'NoiseType','Gaussian','NoiseParam',0.1);
case 9
XName = 'D-Sphere'; XNickName = 'S';
XOpts = struct('NumberOfPoints',1000,'Dim',9,'EmbedDim',100,'NoiseType','Gaussian','NoiseParam',0.1);
EstDimOpts.EnlargeScales = true;
case 10
XName = 'TwoLinesAndAPlane'; XNickName = 'Two Lines and a Plane';
XOpts = struct('NumberOfPoints',800,'Dim','1.5');
EstDimOpts.Ptwise = true;
Labels= [ones(400,1);2*ones(400,1)];
case 11
XName = 'Isomapfaces'; XNickName = 'Isomap Faces';
XOpts = struct('SVDProject',200);
EstDimOpts.Ptwise = true;
case 12
XName = 'CBCLFaces1'; XNickName = 'CBCLFaces1 Faces';
XOpts = struct('SVDProject',200);
EstDimOpts.Ptwise = true;
case 13
XName = 'CBCLFaces2'; XNickName = 'CBCLFaces2 Faces';
XOpts = struct('SVDProject',200);
EstDimOpts.Ptwise = true;
case 14
XName = 'ScienceNews'; XNickName = 'ScienceNews Articles';
XOpts = struct(); %struct('SVDProject',200);
EstDimOpts.Ptwise = true;
case 15
XName = 'BMark_MNIST'; XNickName = 'MNIST Digits';
XOpts = struct('NumberOfPoints',200,'MnistOpts',struct('Sampling', 'RandN', 'QueryDigits',0:9, 'ReturnForm', 'vector'));
case 16
XName = 'ImagePatches'; XNickName = 'Lena Patches';
XOpts = struct('ImageFileName','Lena.jpg','PatchSize',16,'DownsampleImage',8);
case 17
[ Points, Basis, Diffusion, Tree ] = MakeExample( 'Anisotropic',1 );
return;
end
%% Generate the data set
fprintf('\nGenerating %s data...', XName);
[X,GraphDiffOpts] = GenerateDataSets( XName, XOpts);
X = 1*X;
fprintf('done.');
%% Compute Graph Diffusion, and display diffusion embedding
fprintf('\n\nConstructing graph and diffusion map...\n');
G = GraphDiffusion(X, 0, GraphDiffOpts); % These are for debugging purposes
fprintf('done.\n');
figure;
subplot(1,2,1);plot3(G.EigenVecs(:,2),G.EigenVecs(:,3),G.EigenVecs(:,4),'.');title('Diffusion embedding (2,3,4)');
subplot(1,2,2);plot3(G.EigenVecs(:,5),G.EigenVecs(:,6),G.EigenVecs(:,7),'.');title('Diffusion embedding (5,6,7)');
%% Compute Diffusion Wavelets
Tree = DWPTree (G.T^4, 12, 1e-4, struct('Wavelets',true,'OpThreshold',1e-2,'GSOptions',struct('StopDensity',1,'Threshold',1e-2)));
%% Show some diffusion scaling functions, in regular scale and log10 scale to show exp. decay
figure;
for j = 1:4,
subplot(2,2,j);
scatter3(G.EigenVecs(:,2),G.EigenVecs(:,3),G.EigenVecs(:,4),15,Tree{j,1}.ExtBasis(:,1));hold on;
title(sprintf('Diffusion scaling function at scale %d',j));
end;
figure;
for j = 1:4,
subplot(2,2,j);
scatter3(G.EigenVecs(:,2),G.EigenVecs(:,3),G.EigenVecs(:,4),15,Tree{j,2}.ExtBasis(:,1));hold on;
title(sprintf('Diffusion wavelet at scale %d',j));
end;
% Show some compressed powers of T
figure;
for j = 1:4,
subplot(2,4,j);
imagesc(Tree{j,1}.T{1});title(sprintf('[T]_%d',j));colorbar;
subplot(2,4,j+4);
imagesc(log10(abs(Tree{j,1}.T{1})));title(sprintf('log_{10}(|[T]_%d|)',j));colorbar;
end;
fprintf('\n');
% Added by AJW
min_eigenval = min(eig(G.T));
fprintf('The smallest eigenvalue of T is %f \n', min_eigenval)
return;
fprintf('\n');