降维是数据科学和机器学习中无监督学习的重要部分之一。当数据的维度非常高,我们需要通过在低维空间中的投射来讲述数据的故事时,基本上就需要这一部分。有各种降维技术,如PCA、SVD、TruncatedSVD、LDA等,t-SNA也是一种降维技术。在这篇文章中,我们将讨论t-SNA。文章中要讨论的主要内容如下。
内容表
- 关于t-SNE
- t-SNE是如何工作的?
- 用于降维的t-SNE
- t-SNE的使用案例
- 更有效地使用t-SNE
让我们从介绍t-NE开始。
关于t-SNE
t-SNE是一种维度分析或降维的技术,是T型分布的随机邻接嵌入的简称。顾名思义,它是一种非线性的维度技术,可以在数据维度很高的情况下使用。我们也可以说这是一种将高维数据可视化为低维空间的技术。2008年,Laurens van der Maatens和Geoffrey Hinton首次提出了这种技术。
它对数据的非线性行为使其与其他技术不同。PCA等技术是降维的线性算法,保留了较大的成对距离,可能导致高维数据的可视化效果不佳,而t-SNE通过保留小的成对距离,比PCA更好。
t-SNE是如何工作的?
如上所述,它是一种可视化的高维数据的技术,或者我们可以说是一种降维技术。这项技术的工作原理是将高维数据点转换为联合概率,并使用这些概率来最小化Kullback-Leibler分歧,这样就可以得到低维嵌入。这种技术使用的成本函数是一个非凸的成本函数,这意味着每次我们应用它都可以得到一个不同的结果。t-SNE的正确工作可以通过以下步骤来理解:
- 首先,该技术的算法首先计算数据点之间的联合概率,代表点之间的相似度。
- 计算完联合概率后,它根据计算出的联合概率分配数据点之间的相似度。
- 在分配完相似性后,t-SNE根据概率分布在较低维度上表示数据点,直到Kullback-Leibler分歧达到最小。
Kullback-Leibler分歧可以被认为是一种统计距离,它代表了一种概率分布与另一种概率分布的不同计算。
降维的t-SNE
在这一节中,我们将研究如何通过python实现t-SNE的实际降维。在实施之前,我们需要知道sklearn是一个库,在manifold包下提供了实现t-SNE的功能。让我们看一下简单的实现。
让我们用NumPy定义随机数据:
import numpy as np
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 1]])
X.shape
输出:

这里我们可以看到我们所定义的数组的形状。让我们在数组上应用t-SNE:
from sklearn.manifold import TSNE
t_sne = TSNE(n_components=2, learning_rate='auto',init='random')
X_embedded= t_sne.fit_transform(X)
X_embedded.shape
输出:

这里我们可以看到,我们已经改变了定义的数组的形状,这意味着数组的维度减少了。 让我们讨论一下我们可以在哪些地方应用t-SNE与我们的数据。
t-SNE的用例
在上一节中,我们已经看了t-SNE的基本实现和工作,通过看这些东西,我们可以说t-SNE可以应用于非常高维的数据。虽然t-SNE的开发者提到了它在气候研究、计算机安全、生物信息学、癌症研究等领域的应用案例,但在应用这项技术后,我们可以在不同的监督下的建模过程中使用其结果。
我们也可以用这种方法对数据进行聚类或分离。在各种建模过程中,我们一般将模型应用于分离的数据以获得更高的结果。然而,这并不是一种合适的聚类算法或技术。这也可以应用于需要利用数据的可视化进行数据探索的领域。让我们来看看有哪些方法可以使t-SNE更有效。
更有效地使用t-SNE
- 由于我们使用这种技术来分析高维数据,我们需要确保我们使用不同的参数值来迭代应用t-SNE,以达到一个适当的结果。
- 在t-SNE中使用了一个非凸的成本函数,它是一个随机的过程,在迭代中使用它可能代表结果的变化,可以通过固定随机状态参数来解决。
- t-SNE是一种算法,它也可以缩小稀疏数据和放大非稀疏数据。要应用该算法,非常有必要在应用前固定密度/散布/变异的参数。
- 扰度是t-SNE下给出的一个参数,与邻居的数量有关,随着数据集的增大,需要设置更大的扰度。
最后的话
在这篇文章中,我们讨论了t-SNE(T-distributed Stochastic Neighbor Embedding),这是一种用于降维的技术。同时,我们还讨论了t-SNE的工作原理、实现和使用案例,它是一种非线性降维技术。