主要内容

使用t-SNE高维数据可视化

这个例子展示了如何可视化MNIST数据[1],由手写数字图像,使用tsne函数。28-by-28图像像素的灰度。每个图片都有一个关联的标签从0到9,这是代表的数字图像。tsne降低数据的维数从784年最初的尺寸使用PCA 50,然后两个或三个使用t-SNE Barnes-Hut算法。

获得数据

首先获取图像和标签的数据

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

解压文件。对于这个示例,使用t10k-images数据。

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

在工作区中处理文件加载它们。这个处理函数的代码出现在这个例子的结束。

[X, L] = processMNISTdata (imageFileName labelFileName);
读MNIST图像数据……数据集的图像数量:10000…每个图像是由28个像素28…读取图像数据矩阵的尺寸:10000 * 784…读取图像数据。读取MNIST标签数据……数据集的标签数量:10000…标签读取数据矩阵的维度:10000 1…读取标签数据的结束。

减少两个维度的数据

获得二维数据集群使用t-SNE的类似物。使用主成分分析来减少最初的维数到50。使用Barnes-Hut t-SNE算法的变体来节省时间在这个相对较大的数据集。

rng默认的%的再现性Y = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50);

与正确的显示结果,彩色标签。

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

t-SNE创建集群点完全基于他们的相对对应的相似接近真正的标签。

减少三个维度的数据

t-SNE还可以减少三维数据。设置tsne“NumDimensions”名称-值对3

rng默认的%对公平的比较Y3 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“NumDimensions”3);图scatter3 (Y3 (: 1), Y3 (:, 2), Y3(:, 3), 15日,L,“填充”);视图(-93,14)

这是函数的代码读取数据到工作区中。

函数[X, L] = processMNISTdata (imageFileName labelFileName)[文件标识,errmsg] = fopen (imageFileName,“r”,“b”);如果文件标识< 0错误(errmsg);结束% %%第一次读到一个神奇的数字。2051这个数字图像数据,% 2049的标签数据magicNum =从文件中读(文件标识,1“int32”0,“b”);如果magicNum = = 2051流(“\ nRead MNIST图像数据…\ n ')结束% %%然后读取图像的数量,行数和列数numImages =从文件中读(文件标识,1“int32”0,“b”);流(的图像数据集:% 6 d…\ n”,numImages);numRows =从文件中读(文件标识,1“int32”0,“b”);numCols =从文件中读(文件标识,1“int32”0,“b”);流(每张图片是% % 2 d的2 d像素…\ n 'numRows numCols);% %%读取图像数据X =从文件中读(inf文件标识,“无符号字符”);% %%重塑数据数组XX =重塑(X, numCols numRows numImages);X =排列(X, [2 1 3]);% %%然后平每个图像数据到1 (numRows * numCols)向量,和%的所有图像数据存储到一个numImages (numRows * numCols)数组。X =重塑(X, numRows * numCols numImages) ';流([读取的图像数据矩阵的维度:% 6 d % 4 d…\ n ',“阅读图像数据。\ n的终结”),大小(X, 1),大小(X, 2));% %%关闭文件文件关闭(文件标识);% %%同样,读取标签数据。[文件标识,errmsg] = fopen (labelFileName,“r”,“b”);如果文件标识< 0错误(errmsg);结束magicNum =从文件中读(文件标识,1“int32”0,“b”);如果magicNum = = 2049流(“\ nRead MNIST标签数据。\ n”)结束numItems =从文件中读(文件标识,1“int32”0,“b”);流(数据集的标签数量:% 6 d…\ n”,numItems);L =从文件中读(inf文件标识,“无符号字符”);流([的标签读取数据矩阵维度:% 6 d % 2 d…\ n ',“读取标签数据。\ n的终结”),大小(L, 1),大小(L, 2));文件关闭(文件标识);

引用

[1](纽约大学新闻学院)和科琳娜雅安·勒存议会(谷歌实验室,纽约)持有版权的MNIST数据集,这是一个衍生著作从原始NIST的数据集。MNIST数据集的条件下提供Creative Commons Attribution-Share都3.0许可,https://creativecommons.org/licenses/by-sa/3.0/

相关的例子

更多关于