主要内容

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),物种)

使用各种距离度量,尝试在Fisher虹膜数据中获得更好的物种分离。

负载fisheririsrng (“默认”)%为了再现性Y = tsne(量,“算法”,“准确”,“距离”,“mahalanobis”);次要情节(2,2,1)gscatter (Y (: 1), Y(:, 2),物种)标题(“马哈拉诺比斯”)提高(“默认”)为了公平比较Y = tsne(量,“算法”,“准确”,“距离”,“余弦”);次要情节(2 2 2)gscatter (Y (: 1), Y(:, 2),物种)标题(的余弦)提高(“默认”)为了公平比较Y = tsne(量,“算法”,“准确”,“距离”,“切比切夫”); 子地块(2,2,3)gscatter(Y(:,1),Y(:,2),物种)名称(“Chebychev”)提高(“默认”)为了公平比较Y = tsne(量,“算法”,“准确”,“距离”,“欧几里得”);次要情节(2,2,4)gscatter (Y (: 1), Y(:, 2),物种)标题(“欧几里得”)

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

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

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

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

使用将四维数据嵌入到二维中tsne

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

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

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

通过定位数据行,准备打印结果没有值。

goodrows =没有(任何(isnan(量),2));

仅使用以下行打印结果:物种对应的是没有值。

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

找到费雪虹膜数据的二维和三维嵌入,并比较每个嵌入的损失。3-D嵌入的损失可能更小,因为这种嵌入有更多的自由来匹配原始数据。

负载fisheririsrng默认的%为了再现性[Y,损失]=tsne(平均值,“算法”,“准确”);rng默认的为了公平比较(Y2, loss2) = tsne(量,“算法”,“准确”,“NumDimensions”3);流('二维嵌入有损失%g,三维嵌入有损失%g。\n'、损失、loss2)
二维嵌入损失0.124191,三维嵌入损失0.0990884。

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

查看嵌入。使用RGB颜色(1 0 0),(0 1 0),(0 0 1)

对于3-D图,使用分类命令,然后使用稀疏的函数如下。如果v是正整数1、2或3的向量,对应于物种数据,然后是命令

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

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

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

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

输入参数

全部崩溃

数据点,指定为N——- - - - - -M矩阵,其中每行为一M维点。

tsne删除一行行X包含任何值,然后创建嵌入。看到使用NaN输入数据打印结果

数据类型:|

名称-值对参数

指定可选的逗号分隔的字符对名称、值参数。的名字是参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:Y = tsne (X,“算法”,“准确”,“NumPCAComponents”,50)
算法控制

全部崩溃

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

笔记

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

例子:“准确”

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

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

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

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

  • “切比切夫”—切比切夫距离,最大坐标差。

  • “明可夫斯基”-指数为2的Minkowski距离。这与欧几里得距离相同。

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

  • “余弦”-1减去观测值之间夹角的余弦(视为向量)。

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

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

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

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

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

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

例子:“mahalanobis”

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

过分夸张会使人失望tsne了解更大的联合概率Y并在集群之间创造了相对更大的空间Ytsne在前99次优化迭代中使用夸张。

如果Kullback-Leibler发散值在优化的早期阶段增加,请尝试减少这种夸大。看到tsne设置

例子:10

数据类型:|

输出的维度Y,指定为正整数。一般来说,设置NumDimensions2.3.

例子:3.

数据类型:|

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

例子:50

数据类型:|

每个点的有效本地邻居数,指定为正标量。请参阅t-SNE算法

更大的困惑导致tsne使用更多的点作为最近的邻居。使用较大的值困惑对于一个大数据集。典型的困惑值从5.50.在Barnes-Hut算法中,tsne使用最小值(3*N-1)作为最近邻居的数量。看到tsne设置

例子:10

数据类型:|

规格化输入数据,指定为错误的真正的什么时候真正的,tsne中心和尺度X用列除以它们的标准差。

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

例子:真正的

数据类型:必然的

优化控制

全部崩溃

初始嵌入点,指定为N——- - - - - -NumDimensions真正的矩阵,N行数是多少X.的tsne优化算法使用这些点作为初始值。

数据类型:|

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

学习者太小了,,tsne可以收敛到一个较差的局部最小值。当学习者如果太大,优化最初会使Kullback-Leibler散度增大而不是减小。请参阅tsne设置

例子:1000

数据类型:|

迭代显示频率,指定为正整数。当冗长的名称-值对不正确0,tsne每次后返回迭代显示NumPrint迭代。如果选项名称-值对包含一个非空值“OutputFcn”输入,然后输出函数在每个NumPrint迭代。

例子:20.

数据类型:|

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

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

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

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

例子:选择= statset(麦克斯特,500)

数据类型:结构

Barnes-Hut折衷参数,指定为0到1之间的标量。值越高,优化速度越快,但精度越低。仅当算法“barneshut”

例子:0.1

数据类型:|

迭代显示,指定为0,1.,或2.什么时候冗长的不是0,tsne打印出Kullback-Leibler散度及其梯度范数的汇总表NumPrint迭代。

冗长的2.,tsne还打印高斯核的方差。tsne将这些核函数用于联合概率的计算X。如果您看到最小方差和最大方差的比例有很大差异,您有时可以通过重新调整比例获得更合适的结果X

例子:2.

数据类型:|

输出参数

全部崩溃

嵌入点,作为N——- - - - - -NumDimensions矩阵。每一行代表一个嵌入点。N是数据的行数X不包含任何东西条目。看到使用NaN输入数据打印结果

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

更多关于

全部崩溃

自定义距离函数

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

函数ZJ D2 = distfun(子)

tsne通行证ZJ函数,函数计算距离。

  • 这是一张一乘的票-N包含单行的向量XY

  • ZJ是一个M——- - - - - -N的多行矩阵XY

您的函数返回D2,这是一个M-距离的乘-1矢量J第th元素D2观测值之间的距离是多少ZJ (j,:)

提示

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

算法

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

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

有关详细信息,请参阅t-SNE

R2017a中引入