Swiss
Roll Dataset
Dinoj Surendran,
16 May 2004
This
data set was created to test out various dimensionality reduction
algorithms. The idea was to create several points in 2d, and then
map them to 3d with some smooth function, and then to see what the
algorithm would find when it mapped the points back to 2d.
The
original data was created by randomly sampling from a Gaussian
Mixture Model with centers/means at (7.5,7.5), (7.5,12.5),
(12.5,7.5) and (12.5,12.5). The covariance for each gaussian was
the 2x2 identity matrix. This was created with
the
ppm = [400 400 400 400]; % points per mixture
centers = [7.5 7.5; 7.5 12.5; 12.5 7.5; 12.5 12.5];
stdev = 1;
[data2,labels]=makegaussmixnd(centers,stdev,ppm);
plotcol (data2, ppm, 'rgbk');
And then
printing the resulting plot with the printt.m function
:
printt ('original_7p5_12p5_400');
There
are 400 points in each of the four clusters above. The actual data
points can be found in the file preswissroll.dat,
which has a 1600x2 matrix, andpreswissroll_labels.dat,
which has a 1600x1 vector of labels (1,2,3 or 4 depending on which
mixture model the point was generated from).
The data
was then converted from 2 to 3 dimensions with the Swiss Roll
mapping (x,y) -> (x cos x, y, x sin x). Matlab code
for this:
X = data2(:,1);
Y = data2(:,2);
data3 = [X.*cos(X) Y X.*sin(X)];
plotcol (data3,ppm,'rgbk');
This
results in the dataset swissroll.dat (a
1600 x 3 matrix) represented in the picture below. It was created
with the Partiview files