主要内容

tsne设置

这个例子展示了各种各样的影响tsne设置。

获得数据

首先获得MNIST[1]形象和标签的数据

https://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过程数据

获得二维模拟的数据使用t-SNE集群。使用Barnes-Hut算法更好的性能在这个大型数据集,使用PCA初始尺寸从784人减少到50。

rng默认的%的再现性Y = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50);图numGroups =长度(独特(L));clr = hsv (numGroups);gscatter (Y (: 1), Y (:, 2), L, clr)标题(“默认图”)

t-SNE创建一个图分离集群和相对较少的数据点,似乎放错了地方。

困惑

试着改变困惑设置见图上的效果。

rng默认的%对公平的比较= tsne日圆(X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“困惑”,100);图gscatter(日圆(:1),(2):,日圆,L, clr)标题(“100年困惑”)

rng默认的%对公平的比较Y4 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“困惑”4);图gscatter (Y4 (: 1), Y4 (:, 2), L, clr)标题(“困惑4”)

设置困惑100产量的图,这在很大程度上是类似于默认图。集群与默认设置更严格的比。然而,设置困惑4给出了一个图没有很好的分离集群。集群是宽松而不是默认设置。

夸张

试着改变夸张设置见图上的效果。

rng默认的%对公平的比较YEX0 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“夸张”,20);图gscatter (YEX0 (: 1), YEX0 (:, 2), L, clr)标题(“夸张20”)

rng默认的%对公平的比较YEx15 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“夸张”,1.5);图gscatter (YEx15 (: 1), YEx15 (:, 2), L, clr)标题(“夸张1.5”)

而夸张在图上设置有影响,目前尚不清楚是否有默认的设置提供了比默认设置更好的照片。夸张的图20类似于默认图。一般来说,一个更大的夸张嵌入集群之间创造了更多的空间。夸张的1.5导致组标签1和6分成两组,一个不受欢迎的结果。夸大的值X的值的联合分布的联合分布Y小。这使它更容易为嵌入点相对于另一个。集群的分裂1和6反映了这种效应。

学习速率

试着改变学习速率设置见图上的效果。

rng默认的%对公平的比较YL5 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“LearnRate”5);图gscatter (YL5 (: 1), YL5 (:, 2), L, clr)标题(学习速率的5 ')

rng默认的%对公平的比较YL2000 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“LearnRate”,2000);图gscatter (YL2000 (: 1), YL2000 (:, 2), L, clr)标题(“学习速率2000”)

图5有几个集群学习速率的分裂成两个或多个块。这表明如果学习速率太小,最小化过程可能陷入局部最小值。学习速率2000给出了图类似于默认图。

最初的行为与各种设置

大学习利率或大夸张值会导致不良的最初的行为。看到这,设置大值和设置这些参数NumPrint详细的1,显示所有迭代。10后停止迭代,这个实验的目的是看看最初的行为。

通过设置夸张地200年开始。

rng默认的%对公平的比较选择= statset (“麦克斯特”10);YEX200 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“夸张”,200,“NumPrint”,1“详细”,1“选项”、选择);
| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | ITER | | KL分歧规范研究生使用| | |娱乐价值使用|夸大DIST | | | X的夸张DIST | | | | (X) | | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 1 | 2.190347 e + 03 e-05 | 6.078667 | | 2 | 2.190352 e + e 03 03 | 4.769050 | | 3 | 2.204061 e + 03 e-02 | 9.423678 | | 4 | 2.464585 e + 03 e-02 | 2.113271 | | 5 | 2.501222 e + 03 e-02 | 2.616407 | | 6 | 2.529362 e + 03 e-02 | 3.022570 | | 7 e + 03 | 2.553233 | 3.108418 e-02 | | 8 e + 03 | 2.562822 | 3.278873 e-02 | | 9 e + 03 | 2.538056 | 3.222265 e-02 | | 10 e + 03 | 2.504932 | 3.671708 e-02 |

Kullback-Leibler分流增加在头几个迭代中,以及规范的梯度增加。

看到最终结果的嵌入,使算法运行完成使用默认停止标准。

rng默认的%对公平的比较YEX200 = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“夸张”,200);图gscatter (YEX200 (: 1), YEX200 (:, 2), L, clr)标题(“200年夸张”)

这种夸张的价值并不给人一种清爽的分离成集群。

显示初始时的行为学习速率是100000。

rng默认的%对公平的比较YL100k = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“LearnRate”1 e5,“NumPrint”,1“详细”,1“选项”、选择);
| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | ITER | | KL分歧规范研究生使用| | |娱乐价值使用|夸大DIST | | | X的夸张DIST | | | | (X) | | | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | 1 | 2.815885 e + 01 | 1.024049 e-06 | | 2 | 2.816002 e + 01 | 2.902059 e-04 | | 3 | 3.195873 e + 01 | 7.355889 e-04 | | 4 | 3.348151 e + 01 | 3.958901 e-04 | | 5 | 3.365935 e + 01 | 2.876905 e-04 | | 6 | 3.342462 e + 01 | 3.906245 e-04 | | 7 e + 01 | 3.303205 | 4.037983 e-04 | | 8 e + 01 | 3.263320 | 5.665630 e-04 | | 9 e + 01 | 3.235384 | 4.319099 e-04 | | 10 e + 01 | 3.211238 | 4.803526 e-04 |

再次,Kullback-Leibler分流增加在头几个迭代中,以及规范的梯度增加。

看到最终结果的嵌入,使算法运行完成使用默认停止标准。

rng默认的%对公平的比较YL100k = tsne (X,“算法”,“barneshut”,“NumPCAComponents”,50岁,“LearnRate”1 e5);图gscatter (YL100k (: 1), YL100k (:, 2), L, clr)标题(“学习速率100000”)

学习速度太大,没有提供有用的嵌入。

结论

tsne与默认设置很好地将高维初始数据嵌入到二维点有定义良好的集群。算法设置是很难预测的影响。有时他们可以提高集群,但是大多数情况下默认设置看起来不错。虽然速度不是调查的一部分,设置会影响算法的速度。特别是Barnes-Hut算法特别是更快的数据。

代码来处理MNIST数据

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

函数[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/

相关的例子

更多关于

外部网站