首页 > 编程知识 正文

数据可视化布局算法,matlab高维数据可视化

时间:2023-05-04 16:40:21 阅读:141828 作者:2169

3359 blog.csdn.net/HUST QB/article/details/78144384

t-sne数学原理https://Zhan LAN.zhi Hu.com/p/57937096

什么是t-SNE? t-SNE的主要用途是高维数据的可视化和搜索。 由Laurens van der Maatens和Geoffrey Hinton在JMLR第9卷,2008年开发并出版。 t-SNE的主要目标是将多维数据集转换为低维数据集。 相对于其他降维算法,t-SNE对数据可视化效果最好。 将t-SNE应用于n维数据时,可以智能地将n维数据映射到3d或2d数据上,原始数据的相对相似性非常高。 与PCA一样,t-SNE服从非线性而不是线性降维技术是能够捕获高维数据复杂流形结构的主要原因。

t-SNE的结构首先选择一个随机数据点,通过计算与其他数据点|x-x|的甜蜜早晨距离来创建概率分布。 从选定数据点附近的数据点获得更多的相似度值,而从远离选定数据点的数据点获得更少的相似度值。 使用相似度值时,会为每个数据点创建相似度矩阵[s1]。

由于无法可视化超过三维的数据集,因此出于示例目的,假设上图是多维数据的可视化表示。

另外,所谓:邻接是指离各点最近的点的集合。

从上图可以看出,可以说X1的邻域n(X1 )={X2,X3,X4,X5,X6}。 这意味着X2,X3,X4,X5和X6是x1的邻居。 通过相似度矩阵“S1”获得更高的价值。 这是通过计算与其他数据点的甜蜜早晨距离来计算的。

另一方面,X20远离X1。 这样可以在S1中获得较低的值。

接着,根据正态分布将计算出的相似距离转换为联合概率。

通过以上计算,t-SNE将所有数据点随机放置在所需的较低维度上。

t-SNE对高维数据点和随机排列的低维数据点再次进行相同的计算。 但是,在这一步骤中,根据t分布分配概率。 这就是名字t-SNE的理由。

在t-SNE中使用t分布的目的是减少拥挤问题(后来与PCA对比得知)。

但对于高维数据,请记住该算法根据正态分布分配概率。

t分布视觉上t分布看起来像正态分布,但尾部通常很胖。 也就是说,数据的偏差很高。

对于低维数据点,还会创建相似度矩阵[s2]。 其次,该算法通过比较S1和S2以及处理一些复杂的数学运算在S1和S2之间造成了差异。 包括以两个分布之间的Kullback Leibler散度(KL散度)作为损失函数执行梯度下降算法。 利用KL分集,t-SNE可以通过最小化两个分布之间数据点位置的值来保留数据的局部结构。

在统计学上,Kullback-Leibler分散度是衡量一个概率分布与另一个概率分布有何不同的尺度。 梯度下降算法是各种机器学习算法中用于最小化损失函数的优化算法。

最后,该算法可以得到与原始高维数据相似度相对较高的低维据点。 t-SNE算法可以使用sklearn.manifold.TSNE ()实现

要点

t-SNE算法具有扩展密集簇、缩小稀疏簇的特点。 t-SNE不保留群集之间的距离。 因为t-SNE是不确定性算法或随机算法,所以每次运行结果都会稍有变化。 即使无法在每次运行时保持方差,也可以使用超级参数调整来保持每个类之间的距离。 该算法包括许多计算和计算。 因此,该算法在计算中需要大量的时间和空间。 “困惑度”(perplexity )是控制数据点是否适合算法的主要参数。 推荐范围为(550 )。 混乱度必须始终小于数据点的数量。 困惑度低关注本地结构,关注最近的数据点。 困惑度高关心全球结构。 t-SNE可以巧妙处理异常值。 TSNE的参数函数参数表:

parameters描述了n_components嵌入空间维数perpexity的混乱度,表明在t-SNE优化过程中考虑邻点数,缺省为30,推荐值在5~50之间,early_exaggeration为该值越大,可视化的聚类间隔越大,learning_rate学习率表示坡度下降的速度,默认值为200,推荐值为10到1000之间的n_iter反复次数,默认值为1000,250 min _ GGE 缺省为1e-7metric,表示向量之间的距离测量方法,缺省为gddc距离。 如果是precomputed,则输入x是计算出的距离矩阵。 也可以是自定义的距离测量函数。 init初始化,默认为random。 取值为random时随机初始化,取值为pca时用pca初始化(常用),取值为numpy数组时shape=(n_samples,n_components ) ) verbose是否打印优化信息默认值0=不打印信息。 被打印的信息是邻近点数、时间、、KL分散度、误差等rand

om_state随机数种子,整数或RandomState对象method两种优化方法:barnets_hut和exact。第一种耗时O(NlogN),第二种耗时O(N^2)但是误差小,同时第二种方法不能用于百万级样本angle当method=barnets_hut时,该参数有用,用于均衡效率与误差,默认值为0.5,该值越大,效率越高&误差越大,否则反之。当该值在0.2-0.8之间时,无变化。

返回对象的属性表:

Atrtributes描述embedding_嵌入后的向量kl_divergence_KL散度n_iter_迭代的轮数t-distributed Stochastic Neighbor Embedding(t-SNE)

t-SNE可降样本点间的相似度关系转化为概率:在原空间(高维空间)中转化为基于专注的冬日分布的概率;在嵌入空间(二维空间)中转化为基于t分布的概率。这使得t-SNE不仅可以关注局部(SNE只关注相邻点之间的相似度映射而忽略了全局之间的相似度映射,使得可视化后的边界不明显),还关注全局,使可视化效果更好(簇内不会过于集中,簇间边界明显)。

目标函数:原空间与嵌入空间样本分布之间的KL散度。
优化算法:梯度下降。
注意问题:KL散度作目标函数是非凸的,故可能需要多次初始化以防止陷入局部次优解。

t-SNE的缺点:

计算量大,耗时间是PCA的百倍,内存占用大。专用于可视化,即嵌入空间只能是2维或3维。需要尝试不同的初始化点,以防止局部次优解的影响。t-SNE的优化

在优化t-SNE方面,有很多技巧。下面5个参数会影响t-SNE的可视化效果:

perplexity 混乱度。混乱度越高,t-SNE将考虑越多的邻近点,更关注全局。因此,对于大数据应该使用较高混乱度,较高混乱度也可以帮助t-SNE拜托噪声的影响。相对而言,该参数对可视化效果影响不大。early exaggeration factor 该值表示你期望的簇间距大小,如果太大的话(大于实际簇的间距),将导致目标函数无法收敛。相对而言,该参数对可视化效果影响较小,默认就行。learning rate 学习率。关键参数,根据具体问题调节。maximum number of iterations 迭代次数。迭代次数不能太低,建议1000以上。angle (not used in exact method) 角度。相对而言,该参数对效果影响不大。

PS:一个形象展示t-SNE优化技巧的网站How to Use t-SNE Effectively.

简单实现

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import manifold, datasetsdigits = datasets.load_digits(n_class=6)X, y = digits.data, digits.targetn_samples, n_features = X.shape'''显示原始数据'''n = 20 # 每行20个数字,每列20个数字img = np.zeros((10 * n, 10 * n))for i in range(n): ix = 10 * i + 1 for j in range(n): iy = 10 * j + 1 img[ix:ix + 8, iy:iy + 8] = X[i * n + j].reshape((8, 8))plt.figure(figsize=(8, 8))plt.imshow(img, cmap=plt.cm.binary)plt.xticks([])plt.yticks([])plt.show()

 

'''t-SNE'''tsne = manifold.TSNE(n_components=2, init='pca', random_state=501)X_tsne = tsne.fit_transform(X)print("Org data dimension is {}. Embedded data dimension is {}".format(X.shape[-1], X_tsne.shape[-1]))'''嵌入空间可视化'''x_min, x_max = X_tsne.min(0), X_tsne.max(0)X_norm = (X_tsne - x_min) / (x_max - x_min) # 归一化plt.figure(figsize=(8, 8))for i in range(X_norm.shape[0]): plt.text(X_norm[i, 0], X_norm[i, 1], str(y[i]), color=plt.cm.Set1(y[i]), fontdict={'weight': 'bold', 'size': 9})plt.xticks([])plt.yticks([])plt.show()

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。