前言
高维数据映射通常涉及使用降维技术,其中t-SNE是一种非线性降维技术,用于将高维数据映射到低维空间,以便可视化和理解数据的结构。
t-SNE的核心思想是基于相似性概率的建模,其中相似的数据点在映射后仍然保持相似。具体而言,给定两个数据点 和 它们在高维空间中的相似性概率 () 表示为:
其中, 是数据点 和 之间的欧几里德距离, 是数据点 周围点的高斯分布的方差,用于衡量每个数据点周围邻居的密度。
在低维空间中,相似性概率 () 通过使用 分布来建模,具体表示为:
其中, 和 是数据点 和 在低维空间中的映射。
t-SNE通过最小化相似性分布 和 之间的 散度来优化映射,具体表示为:
在t-SNE的优化过程中,通过梯度下降等优化算法,调整低维空间的映射,使得 散度越小,高维空间中相似的数据点在低维空间中仍然保持相似。需要注意的是,t-SNE是一个非凸优化问题,因此可能存在多个局部最小值,而初始参数选择对结果影响较大。公式描述了t-SNE的基本数学原理,实际应用中会有一些细微的调整和改进,以提高算法的性能。
t-SNE在实际中的主要应用方面:
- 数据探索和可视化: t-SNE广泛用于将高维数据集映射到二维或三维空间,以便通过可视化来探索数据的结构和模式。它有助于发现数据中的群集、聚类或潜在的子结构,帮助用户更好地理解数据。
- 聚类分析: t-SNE的降维特性使其成为聚类分析的有力工具。通过在低维空间中可视化数据点,用户可以更容易地识别数据中的聚类结构,从而帮助聚类算法的选择和调整。
- 异常检测: 通过在低维空间中观察数据点的分布,t-SNE有助于发现数据中的异常点。异常点通常在低维空间中表现出与正常点不同的模式,使得它们更容易被识别。
- 自然语言处理(NLP): 在自然语言处理任务中,t-SNE可用于将词嵌入(word embeddings)映射到低维空间,以便在二维平面上可视化单词之间的语义关系。这有助于理解单词嵌入的语义结构。
- 图像处理: 在图像处理领域,t-SNE可以用于将图像特征映射到低维空间,以便进行图像分类、检测和相似性分析。这有助于理解图像数据的结构和模式。
- 生物信息学: 在生物信息学中,t-SNE可以用于分析基因表达数据,帮助发现基因表达模式并识别潜在的生物学群集。
需要注意的是,t-SNE对于大规模数据集的计算成本较高,因此在处理大型数据时,可能需要采取一些优化策略或考虑其他降维技术。此外,t-SNE的结果对于不同的初始化和超参数可能会有所不同,因此在使用时需要进行谨慎调整。
代码实现
# 导入所需的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.manifold import TSNE
# 加载Iris数据集 鸢尾花
iris = datasets.load_iris()
X = iris.data
y = iris.target
print('数据降维前维度:',X.shape)
# 使用t-SNE进行降维
tsne = TSNE(n_components=2, random_state=0)
X_2d = tsne.fit_transform(X)
print('数据降维后维度:',X_2d.shape)
使用了t-SNE算法对鸢尾花(Iris)数据集进行降维,降维前数据维度为(150,4)进行降维后数据维度变为(150,2)将高维数据集映射到二维空间,以便通过可视化来探索数据每个类别的群集。
# 创建一个包含三个子图的画布
fig, ax = plt.subplots(figsize=(10, 8))
colors = ['red', 'green', 'blue']
labels = ['Setosa', 'Versicolor', 'Virginica']
for i in range(len(np.unique(y))):
indices = y == i
ax.scatter(X_2d[indices, 0], X_2d[indices, 1], c=colors[i], label=labels[i], edgecolors='k', s=80)
ax.legend()
ax.set_title('t-SNE Visualization of Iris Dataset')
ax.set_xlabel('t-SNE Component 1')
ax.set_ylabel('t-SNE Component 2')
for i in range(X_2d.shape[0]):
ax.text(X_2d[i, 0], X_2d[i, 1], str(y[i]), color=colors[y[i]], fontsize=8, ha='center', va='center')
plt.show()
通过t-SNE降维后的鸢尾花数据集进行可视化,每个类别用不同颜色表示,同时显示数据点的类别标签,实现了高维数据集的降维可视化,使得用户可以更容易地识别数据中的聚类结构,从而帮助聚类算法的选择和调整。
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~