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.

Configuracióntsne

Este ejemplo muestra los efectos de varias configuraciones.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. 

Procesar datos con t-SNE

Obtenga análogos bidimensionales de los clústeres de datos utilizando t-SNE. Utilice el algoritmo Barnes-Hut para obtener un mejor rendimiento en este gran conjunto de datos. Utilice PCA para reducir las dimensiones iniciales de 784 a 50.

rng default % for reproducibility Y = tsne(X,'Algorithm','barneshut','NumPCAComponents',50); figure gscatter(Y(:,1),Y(:,2),L) title('Default Figure') 

t-SNE crea una figura con clústeres bien separados y relativamente pocos puntos de datos que parecen extraviados.

Perplejidad

Intente alterar la configuración de la perplejidad para ver el efecto en la figura.

rng default % for fair comparison Y100 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'Perplexity',100); figure gscatter(Y100(:,1),Y100(:,2),L) title('Perplexity 100')  rng default % for fair comparison Y4 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'Perplexity',4); figure gscatter(Y4(:,1),Y4(:,2),L) title('Perplexity 4') 

Establecer la perplejidad en 100 produce una cifra que es en gran medida similar a la figura predeterminada. Los clústeres son más estrictos que con la configuración predeterminada. Sin embargo, establecer la perplejidad en 4 da una figura sin clústeres bien separados. Los clústeres son más sueltas que con la configuración predeterminada.

Exageración

Intente alterar la configuración de exageración para ver el efecto en la figura.

rng default % for fair comparison YEX0 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'Exaggeration',20); figure gscatter(YEX0(:,1),YEX0(:,2),L) title('Exaggeration 20')  rng default % for fair comparison YEx15 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'Exaggeration',1.5); figure gscatter(YEx15(:,1),YEx15(:,2),L) title('Exaggeration 1.5') 

Mientras que la configuración de exageración tiene un efecto en la figura, no está claro si cualquier configuración no predeterminada da una mejor imagen que la configuración predeterminada. La figura con una exageración de 20 es similar a la figura predeterminada. En general, una exageración más grande crea un espacio más vacío entre los clústeres incrustados. Una exageración de 1,5 hace que los grupos etiquetados 1 y 6 se dividirán en dos grupos cada uno, un resultado no deseable. Exagerar los valores de la distribución conjunta de X hace que los valores de la distribución conjunta de Y sean más pequeños. Esto hace que sea mucho más fácil para los puntos incrustados para moverse en relación entre sí. La división de los clústeres 1 y 6 refleja este efecto.

Tasa de aprendizaje

Intente alterar la configuración de la velocidad de aprendizaje para ver el efecto en la figura.

rng default % for fair comparison YL5 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'LearnRate',5); figure gscatter(YL5(:,1),YL5(:,2),L) title('Learning Rate 5')  rng default % for fair comparison YL2000 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'LearnRate',2000); figure gscatter(YL2000(:,1),YL2000(:,2),L) title('Learning Rate 2000') 

La cifra con una tasa de aprendizaje de 5 tiene varios clústeres que se dividen en dos o más piezas. Esto muestra que si la tasa de aprendizaje es demasiado pequeña, el proceso de minimización puede quedar atascado en un mínimo local malo. Una tasa de aprendizaje de 2000 da una figura similar a la figura predeterminada.

Comportamiento inicial con varios ajustes

Las grandes tasas de aprendizaje o los valores de exageración grandes pueden conducir a un comportamiento inicial no deseable. Para ver esto, establezca valores grandes de estos parámetros y establezca y a 1 para mostrar todas las iteraciones.NumPrintVerbose Detenga las iteraciones después de 10, ya que el objetivo de este experimento es simplemente mirar el comportamiento inicial.

Empiece por establecer la exageración a 200.

rng default % for fair comparison opts = statset('MaxIter',10); YEX200 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'Exaggeration',200,...     'NumPrint',1,'Verbose',1,'Options',opts); 
 |==============================================| |   ITER   | KL DIVERGENCE   | NORM GRAD USING | |          | FUN VALUE USING | EXAGGERATED DIST| |          | EXAGGERATED DIST| OF X            | |          | OF X            |                 | |==============================================| |        1 |    2.190347e+03 |    6.078667e-05 | |        2 |    2.190352e+03 |    4.769050e-03 | |        3 |    2.204061e+03 |    9.423678e-02 | |        4 |    2.464585e+03 |    2.113271e-02 | |        5 |    2.501222e+03 |    2.616407e-02 | |        6 |    2.529362e+03 |    3.022570e-02 | |        7 |    2.553233e+03 |    3.108418e-02 | |        8 |    2.562822e+03 |    3.278873e-02 | |        9 |    2.538056e+03 |    3.222265e-02 | |       10 |    2.504932e+03 |    3.671708e-02 | 

La divergencia Kullback-Leibler aumenta durante las primeras iteraciones, y la norma del gradiente también aumenta.

Para ver el resultado final de la incrustación, permita que el algoritmo se ejecute hasta su finalización mediante los criterios de detención predeterminados.

rng default % for fair comparison YEX200 = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'Exaggeration',200); figure gscatter(YEX200(:,1),YEX200(:,2),L) title('Exaggeration 200') 

Este valor de exageración no da una separación limpia en los clústeres.

Mostrar el comportamiento inicial cuando la tasa de aprendizaje es 100.000.

rng default % for fair comparison YL100k = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'LearnRate',1e5,...     'NumPrint',1,'Verbose',1,'Options',opts); 
 |==============================================| |   ITER   | KL DIVERGENCE   | NORM GRAD USING | |          | FUN VALUE USING | EXAGGERATED DIST| |          | EXAGGERATED DIST| OF X            | |          | OF X            |                 | |==============================================| |        1 |    2.815885e+01 |    1.024049e-06 | |        2 |    2.816002e+01 |    2.902059e-04 | |        3 |    3.195873e+01 |    7.355889e-04 | |        4 |    3.348151e+01 |    3.958901e-04 | |        5 |    3.365935e+01 |    2.876905e-04 | |        6 |    3.342462e+01 |    3.906245e-04 | |        7 |    3.303205e+01 |    4.037983e-04 | |        8 |    3.263320e+01 |    5.665630e-04 | |        9 |    3.235384e+01 |    4.319099e-04 | |       10 |    3.211238e+01 |    4.803526e-04 | 

Una vez más, la divergencia Kullback-Leibler aumenta durante las primeras iteraciones, y la norma del gradiente también aumenta.

Para ver el resultado final de la incrustación, permita que el algoritmo se ejecute hasta su finalización mediante los criterios de detención predeterminados.

rng default % for fair comparison YL100k = tsne(X,'Algorithm','barneshut','NumPCAComponents',50,'LearnRate',1e5); figure gscatter(YL100k(:,1),YL100k(:,2),L) title('Learning Rate 100,000') 

La velocidad de aprendizaje es demasiado grande y no proporciona ninguna incrustación útil.

Conclusión

con la configuración predeterminada hace un buen trabajo de incrustar los datos iniciales de alta dimensión en puntos bidimensionales que tienen clústeres bien definidos.tsne Los efectos de la configuración del algoritmo son difíciles de predecir. A veces pueden mejorar el clustering, pero en su mayor parte la configuración predeterminada parece buena. Mientras que la velocidad no es parte de esta investigación, los ajustes pueden afectar la velocidad del algoritmo. En particular, el algoritmo de Barnes-Hut es notablemente más rápido en estos datos.

Código para procesar datos MNIST

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

Sitios web externos