Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Visualice datos de alta cota con t-SNE

Este ejemplo muestra cómo visualizar los datos MNIST, que consisten en imágenes de dígitos escritos a mano, utilizando la función.tsne Las imágenes son de 28 por 28 píxeles en escala de grises. Cada imagen tiene una etiqueta asociada de 0 a 9, que es el dígito que representa la imagen. reduce la dimensión de los datos de 784 dimensiones originales a 50 utilizando PCA, y luego a dos o tres utilizando el algoritmo t-SNE Barnes-Hut.tsne

Obtener datos

Empiece obteniendo datos de imagen y etiqueta de

http://yann.lecun.com/exdb/mnist/

Descomprima los archivos. Para este ejemplo, utilice los datos.t10k-images

imageFileName = 't10k-images.idx3-ubyte'; labelFileName = 't10k-labels.idx1-ubyte'; 

Procese los archivos para cargarlos en el espacio de trabajo. El código para esta función de procesamiento aparece al final de este ejemplo. Para ejecutar el código, agregue el directorio de la función a la ruta de búsqueda.

addpath(fullfile(matlabroot,'examples','stats')); % add to the path [X,L] = processMNISTdata(imageFileName,labelFileName); rmpath(fullfile(matlabroot,'examples','stats')); % remove from the path 
 Read MNIST image data... Number of images in the dataset:  10000 ... Each image is of 28 by 28 pixels... The image data is read to a matrix of dimensions:  10000 by  784... End of reading image data.  Read MNIST label data... Number of labels in the dataset:  10000 ... The label data is read to a matrix of dimensions:  10000 by  1... End of reading label data. 

Reduzca la dimensión de los datos a dos

Obtenga análogos bidimensionales de los clústeres de datos utilizando t-SNE. Utilice PCA para reducir la dimensionalidad inicial a 50. Utilice la variante Barnes-Hut del algoritmo t-SNE para ahorrar tiempo en este conjunto de datos relativamente grande.

rng default % for reproducibility Y = tsne(X,'Algorithm','barneshut','NumPCAComponents',50); 

Visualice el resultado, coloreado con las etiquetas correctas.

figure gscatter(Y(:,1),Y(:,2),L) 

t-SNE crea clusters de puntos basados únicamente en sus similitudes relativas que corresponden estrechamente a las verdaderas etiquetas.

Reduzca la dimensión de los datos a tres

t-SNE también puede reducir los datos a tres dimensiones. Establezca el par nombre-valor en.tsne'NumDimensions'3

rng default % for fair comparison Y3 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'NumDimensions',3); figure scatter3(Y3(:,1),Y3(:,2),Y3(:,3),15,L,'filled'); view(-93,14) 

Este es el código de la función que lee los datos en el área de trabajo.

 function [X,L] = processMNISTdata(imageFileName,labelFileName)  [fileID,errmsg] = fopen(imageFileName,'r','b'); if fileID < 0     error(errmsg); end %% % First read the magic number. This number is 2051 for image data, and % 2049 for label data magicNum = fread(fileID,1,'int32',0,'b'); if magicNum == 2051     fprintf('\nRead MNIST image data...\n') end %% % Then read the number of images, number of rows, and number of columns numImages = fread(fileID,1,'int32',0,'b'); fprintf('Number of images in the dataset: %6d ...\n',numImages); numRows = fread(fileID,1,'int32',0,'b'); numCols = fread(fileID,1,'int32',0,'b'); fprintf('Each image is of %2d by %2d pixels...\n',numRows,numCols); %% % Read the image data X = fread(fileID,inf,'unsigned char'); %% % Reshape the data to array X X = reshape(X,numCols,numRows,numImages); X = permute(X,[2 1 3]); %% % Then flatten each image data into a 1 by (numRows*numCols) vector, and  % store all the image data into a numImages by (numRows*numCols) array. X = reshape(X,numRows*numCols,numImages)'; fprintf(['The image data is read to a matrix of dimensions: %6d by %4d...\n',...     'End of reading image data.\n'],size(X,1),size(X,2)); %% % Close the file fclose(fileID); %% % Similarly, read the label data. [fileID,errmsg] = fopen(labelFileName,'r','b'); if fileID < 0     error(errmsg); end magicNum = fread(fileID,1,'int32',0,'b'); if magicNum == 2049     fprintf('\nRead MNIST label data...\n') end numItems = fread(fileID,1,'int32',0,'b'); fprintf('Number of labels in the dataset: %6d ...\n',numItems);  L = fread(fileID,inf,'unsigned char'); fprintf(['The label data is read to a matrix of dimensions: %6d by %2d...\n',...     'End of reading label data.\n'],size(L,1),size(L,2)); fclose(fileID);  

Ejemplos relacionados

Más acerca de