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 makegaussmixnd.m and plotcol.m functions :

  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;
  plotcol (data2, ppm, 'rgbk');

And then printing the resulting plot with the printt.m function :

  printt ('original_7p5_12p5_400');

The resulting image files original_7p5_12p5_400.eps and original_7p5_12p5_400.jpg look like this:

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, and preswissroll_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, swissroll.speck and points3d.cmap.