主要内容

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

此示例演示如何使用tsne函数。这些图像的灰度是28 × 28像素。每个图像都有一个从0到9的关联标签,这是图像所代表的数字。tsne使用主成分分析(PCA)将数据的原始维数从784降至50,然后使用t-SNE Barnes-Hut算法将其降至2或3。

获得数据

从获取图像和标签数据开始

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

解压文件。在本例中,使用t10k图像数据。

imageFileName =“t10k-images.idx3-ubyte”;标签名称=“t10k-labels.idx1-ubyte”

处理这些文件以在工作区中加载它们。此处理函数的代码出现在本示例的末尾。

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

将数据维度减少到两个

使用t-SNE获得数据簇的二维类似物。使用PCA将初始维度降低到50。使用t-SNE算法的Barnes-Hut变体在这个相对较大的数据集上节省时间。

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) [fileID,errmsg] = fopen(imageFileName, labelFileName)“r”“b”);如果fileID < 0错误(errmsg);结束%%先读这个神奇的数字。对于图像数据,这个数字是2051% 2049用于标签数据magicNum =从文件中读(文件标识,1“int32”0,“b”);如果magicNum==2051 fprintf('\nRead mist图像数据…\n'结束%%%然后读取图像数、行数和列数numImages =从文件中读(文件标识,1“int32”0,“b”);流('数据集中的图像数量:%6d…\n', numImages);numRows =从文件中读(文件标识,1“int32”0,“b”);numCols =从文件中读(文件标识,1“int32”0,“b”);流(“每个图像是%2d × %2d像素……\n”numRows numCols);%%%读取镜像数据X =从文件中读(inf文件标识,“无符号字符”);%%%将数据重塑为数组XX=重塑(X,numCols,numRows,numImages);X=置换(X,[2 1 3]);%%%然后将每个图像数据展平为1 by(numRows*numCols)向量,然后%将所有图像数据存储到一个numImages by (numRows*numCols)数组中。X =重塑(X, numRows * numCols numImages) ';流(['图像数据被读取为一个维度矩阵:%6d by %4d…\n'...'读取图像数据结束。\n'),大小(X, 1),大小(X, 2));%%%关闭文件文件关闭(文件标识);%%%同样,读取标签数据。[文件标识,errmsg] = fopen (labelFileName,“r”“b”);如果fileID < 0错误(errmsg);结束magicNum =从文件中读(文件标识,1“int32”0,“b”);如果magicNum==2049 fprintf('\nRead nist label data…\n'结束numItems =从文件中读(文件标识,1“int32”0,“b”);流('数据集中的标签数:%6d…\n', numItems);L =从文件中读(inf文件标识,“无符号字符”);流(['标签数据被读取到一个维度为:%6d by %2d…\n'...'读取标签数据结束。\n'),大小(L, 1),大小(L, 2));文件关闭(文件标识);

工具书类

Yann LeCun (Courant Institute, NYU)和Corinna Cortes(谷歌Labs, New York)拥有MNIST数据集的版权,该数据集是NIST原始数据集的衍生作品。MNIST数据集是在知识共享署名-共享相似3.0许可条款下提供的,https://creativecommons.org/licenses/by-sa/3.0/

相关的例子

更多关于