主要内容

tsne

t分布随机邻居嵌入

描述

例子

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

例子

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

例子

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

例子

全部折叠

Fisher虹膜数据集有虹膜的四维测量,以及相应的物种分类。通过使用减少维度来可视化该数据tsne

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

图中包含一个轴对象。轴对象包含3个类型为line的对象。这些物品代表着维珍卡。

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

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

图中包含4个轴对象。轴对象1与标题马氏包含3个对象的类型线。这些物品代表着维珍卡。标题为余弦的轴对象2包含3个类型为line的对象。这些物品代表着维珍卡。标题为Chebychev的对象3包含3个类型为line的对象。这些物品代表着维珍卡。标题为欧氏的轴对象4包含3个类型为line的对象。这些物品代表着维珍卡。

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

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个类型为line的对象。这些物品代表着维珍卡。

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

负载fisheririsrng默认的%的再现性(Y,亏损)= tsne(量,“算法”“准确”);rng默认的为了公平比较(Y2, loss2) = tsne(量,“算法”“准确”“NumDimensions”3);流('2-D嵌入损失%g, 3-D嵌入损失%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))标题(“二维嵌入”

图中包含一个轴对象。标题为2d Embedding的轴对象包含3个类型为line的对象。这些物品代表着维珍卡。

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

图中包含一个轴对象。标题为3d Embedding的轴对象包含一个散点类型的对象。

输入参数

全部折叠

数据点,指定为n——- - - - - -矩阵,每一行是1维点。

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

数据类型:|

名称-值参数

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

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

全部折叠

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

请注意

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

例子:“准确”

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

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

  • “seuclidean”-标准化的欧氏距离。每一行之间的坐标差X查询矩阵的比例是通过除以相应的标准偏差元素计算出来的S =性病(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平台以及

例子:选择= statset(麦克斯特,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算法

更多关于

全部折叠

自定义距离函数

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

函数ZJ D2 = distfun(子)

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

  • 是1 -n包含单行的向量XY

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

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

提示

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

算法

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

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

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

介绍了R2017a