主要内容

tsne

t分布随机邻居嵌入

描述

例子

Y= tsne (X的高维行的二维嵌入的矩阵X

例子

Y= tsne (X名称,值使用由一个或多个名-值对参数指定的选项修改嵌入。

例子

Y损失= tsne(___,对于任何输入参数,还返回对数据建模的联合分布之间的Kullback-Leibler散度X还有嵌入Y

例子

全部折叠

Fisher虹膜数据集对虹膜进行了四维测量,并进行了相应的种类分类。通过使用降低维数来可视化此数据tsne

负载fisheririsrng默认的再现率%Y = tsne(meas);gscatter (Y (: 1), Y(:, 2),物种)

图中包含一个轴对象。axis对象包含3个line类型的对象。这些物品代表了setosa, versicolica, virgica。

使用各种距离度量来尝试在费雪虹膜数据中获得更好的物种之间的分离。

负载fisheririsrng (“默认”再现率%Y = tsne(meas,“算法”“准确”“距离”“mahalanobis”);次要情节(2,2,1)gscatter (Y (: 1), Y(:, 2),物种)标题(“Mahalanobis”)提高(“默认”%作公平比较Y = tsne(meas,“算法”“准确”“距离”的余弦);次要情节(2 2 2)gscatter (Y (: 1), Y(:, 2),物种)标题(的余弦)提高(“默认”%作公平比较Y = tsne(meas,“算法”“准确”“距离”“chebychev”);次要情节(2,2,3)gscatter (Y (: 1), Y(:, 2),物种)标题(“Chebychev”)提高(“默认”%作公平比较Y = tsne(meas,“算法”“准确”“距离”“欧几里得”);次要情节(2,2,4)gscatter (Y (: 1), Y(:, 2),物种)标题(“欧几里得”

图中包含4个轴对象。标题为Mahalanobis的Axes对象1包含3个类型为line的对象。这些物品代表了setosa, versicolica, virgica。标题为cos的坐标轴对象2包含3个类型为line的对象。这些物品代表了setosa, versicolica, virgica。标题为Chebychev的Axes对象3包含3个类型为line的对象。这些物品代表了setosa, versicolica, virgica。标题为Euclidean的坐标轴对象4包含3个类型为line的对象。这些物品代表了setosa, versicolica, virgica。

在这种情况下,余弦、切比雪夫和欧几里得距离度量给出了相当好的簇分离。但是马氏距离度量并没有给出很好的分离。

tsne删除包含任意的输入数据行条目。因此,在绘图之前必须从分类数据中删除任何此类行。

例如,将Fisher虹膜数据中的一些随机条目更改为

负载fisheririsrng默认的再现率%meas(rand(size(meas)) < 0.05) = NaN;

将四维数据嵌入二维tsne

Y = tsne(meas,“算法”“准确”);
警告:在X或'InitialY'值中缺少NaN值的行将被删除。

确定从嵌入中消除了多少行。

长度(物种)长度(Y)
Ans = 22

的行,准备绘制结果没有值。

Goodrows = not(any(isnan(meas),2));

的行绘制结果物种对应于没有值。

gscatter (Y (: 1), Y(:, 2),物种(goodrows))

图中包含一个轴对象。axis对象包含3个line类型的对象。这些物品代表了setosa, versicolica, virgica。

找到Fisher虹膜数据的2-D和3-D嵌入,并比较每个嵌入的损失。三维嵌入的损失可能更低,因为这种嵌入有更大的自由度来匹配原始数据。

负载fisheririsrng默认的再现率%[Y,损失]= tsne(meas,“算法”“准确”);rng默认的%作公平比较[Y2,loss2] = tsne(meas;“算法”“准确”“NumDimensions”3);流('二维嵌入有损耗%g,三维嵌入有损耗%g。\n'、损失、loss2)
二维嵌入损耗为0.1255,三维嵌入损耗为0.0980872。

正如预期的那样,三维嵌入具有更低的损耗。

查看嵌入。使用RGB颜色[10 0 0][0 10 0],[0 0 1]

方法将物种转换为数值分类命令,然后将数值转换为RGB颜色稀疏的函数如下。如果v是一个正整数向量1、2或3,对应的物种数据,那么命令

稀疏(1:元素个数(v), v, 1(大小(v)))

为稀疏矩阵,其行为物种的RGB颜色。

gscatter (Y (: 1), Y(:, 2),物种,眼(3))标题(“二维嵌入”

图中包含一个轴对象。标题为2-D Embedding的axis对象包含3个类型为line的对象。这些物品代表了setosa, versicolica, virgica。

图v = double(分类(种));c =全(稀疏(1:元素个数(v), v,(大小(v))的元素个数(v), 3));scatter3 (Y2 (:, 1), Y2 (:, 2), Y2(:, 3), 15日,c,“填充”)标题(“3 d嵌入”)视图(-50 8)

图中包含一个轴对象。标题为3-D Embedding的axes对象包含一个类型为scatter的对象。

输入参数

全部折叠

的数据点n——- - - - - -矩阵,每一行都是1维点。

tsne删除X包含任何在创建嵌入之前的值。看到用NaN输入数据绘制结果

数据类型:|

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:Y = tsne(X,'Algorithm','Exact','NumPCAComponents',50)

算法控制

全部折叠

tsne算法,指定为“barneshut”“准确”.的“准确”算法优化原始空间与嵌入空间分布的Kullback-Leibler散度。的“barneshut”算法在数据行数较大时执行近似优化,速度更快,占用内存更少。

请注意

“barneshut”算法,tsne使用knnsearch找到最近的邻居。

例子:“准确”

距离度量,由下列之一指定。有关距离度量的定义,请参见pdist

  • “欧几里得”-欧氏距离。

  • “seuclidean”-标准化欧几里得距离。每一行之间的坐标差X查询矩阵通过除以计算的标准偏差的相应元素来缩放S = std(X,'omitnan')

  • “cityblock”-城市街区距离。

  • “chebychev”-切比雪夫距离,即最大坐标差。

  • 闵可夫斯基的-指数2的闵可夫斯基距离。这和欧氏距离是一样的。

  • “mahalanobis”-马氏距离,使用正定协方差矩阵计算X (X, omitrows)

  • 的余弦- 1减去观测值之间夹角的余弦(作为向量处理)。

  • “相关”- 1减去观测值之间的样本线性相关性(作为值序列处理)。

  • “枪兵”- 1减去观测值之间的样本斯皮尔曼秩相关(被视为值序列)。

  • “汉明”-汉明距离,即不同坐标的百分比。

  • “jaccard”- 1减去杰卡德系数,这是不同的非零坐标的百分比。

  • 自定义距离函数-使用指定的距离函数@(例如,@distfun).详细信息请参见更多关于

在所有情况下,tsne的联合分布中,使用成对距离的平方来计算高斯核X

例子:“mahalanobis”

数据中自然簇的大小,指定为标量值1或更高版本。

一个很大的夸张tsne学习更大的联合概率Y并在集群之间创建相对更大的空间Ytsne在前99次优化迭代中使用夸张。

如果在优化前期Kullback-Leibler散度值增加,则尝试减少夸张。看到tsne设置

例子:10

数据类型:|

输出尺寸Y,指定为正整数。一般来说,设置NumDimensions23.

例子:3.

数据类型:|

PCA降维,指定为非负整数。之前tsne嵌入高维数据时,首先将数据的维数降为NumPCAComponents使用主成分分析函数。当NumPCAComponents0tsne不使用PCA。

例子:50

数据类型:|

每个点的有效局部邻域数,指定为正标量。看到t-SNE算法

较大的困惑原因tsne使用更多的点作为最近的邻居。使用较大的值困惑对于大型数据集。典型的困惑值来自550.在Barnes-Hut算法中,tsne使用分钟(3 *困惑,n - 1)作为最近邻居的数量。看到tsne设置

例子:10

数据类型:|

规范化输入数据,指定为真正的.当真正的tsne中心与规模X通过将列除以它们的标准差。

当特性在X在不同的尺度上“标准化”真正的.这样做是因为学习过程是基于最近的邻居,所以大尺度的特征可以覆盖小尺度特征的贡献。

例子:真正的

数据类型:逻辑

优化控制

全部折叠

初始嵌入点,指定为n——- - - - - -NumDimensions实矩阵,其中n的行数是多少X.的tsne优化算法将这些点作为初始值。

数据类型:|

优化过程的学习率,指定为正标量。通常,从One hundred.通过1000

LearnRate太小了,tsne可以收敛到一个糟糕的局部最小值。当LearnRate时,初始优化后的Kullback-Leibler散度不减反增。看到tsne设置

例子:1000

数据类型:|

迭代显示频率,指定为正整数。当详细的名称-值对不是0tsne在每个之后返回迭代显示NumPrint迭代。如果选项名称-值对包含一个非空对象“OutputFcn”条目,然后输出函数在每个条目之后运行NumPrint迭代。

例子:20.

数据类型:|

优化选项,指定为包含字段的结构“麦克斯特”“OutputFcn”,“TolFun”.创建“选项”使用statset结构体

  • “麦克斯特”—指定最大优化迭代次数的正整数。默认值:1000

  • “OutputFcn”-函数句柄或函数句柄的单元格数组,指定在每个函数之后调用一个或多个函数NumPrint优化迭代。有关语法的详细信息,请参见t-SNE输出函数.默认值:[]

  • “TolFun”-优化的停止准则。当Kullback-Leibler散度梯度的范数小于时,优化退出“TolFun”.默认值:1平台以及

例子:options = statset('MaxIter',500)

数据类型:结构体

Barnes-Hut权衡参数,指定为0到1之间的标量。数值越高,优化速度越快,但精度越低。仅适用于以下情况算法“barneshut”

例子:0.1

数据类型:|

迭代显示,指定为01,或2.当详细的不是0tsne打印Kullback-Leibler散度的汇总表及其梯度的范数NumPrint迭代。

详细的2tsne也打印高斯核的方差。tsne的联合概率的计算中使用这些核X.如果在最小方差和最大方差的尺度上看到很大的差异,有时可以通过重新缩放得到更合适的结果X

例子:2

数据类型:|

输出参数

全部折叠

嵌入点,返回为n——- - - - - -NumDimensions矩阵。每一行表示一个嵌入点。n是数据的行数吗X不包含任何条目。看到用NaN输入数据绘制结果

模型输入和输出分布之间的Kullback-Leibler散度,作为非负标量返回。详细信息请参见t-SNE算法

更多关于

全部折叠

自定义距离函数

自定义距离函数的语法如下:

函数D2 = distfun(ZI,ZJ)

tsne通过而且ZJ到函数,函数计算距离。

  • 是1 × -吗n的单行向量XY

  • ZJ是一个——- - - - - -n矩阵包含多行XY

函数返回D2,这是一个-by-1的距离向量。的j的第Th元素D2观测值之间的距离是多少而且ZJ (j,:)

提示

如果你的数据不是稀疏的,那么通常内置的距离函数比函数句柄快。

算法

tsne在低维空间中构造一组嵌入点,这些点的相对相似性模拟原始高维点的相对相似性。嵌入点表示原始数据中的聚类。

粗略地说,该算法将原始点建模为来自高斯分布,而嵌入点建模为来自学生分布t分布。该算法试图通过移动嵌入点来最小化这两个分布之间的Kullback-Leibler散度。

详细信息请参见t-SNE

版本历史

在R2017a中引入