探索t-SNE如何可视化高维数据。学习如何揭示Ultralytics 计算机视觉特征中的聚类,并优化机器学习模型。
t-分布随机邻域嵌入(t-SNE)是一种统计方法,通过为每个数据点在二维或三维空间中分配位置来实现高维数据的可视化。 作为非线性降维技术的一种,该方法在机器学习领域被广泛用于探索包含数百至数千特征的数据集。不同于侧重全局结构保留的线性方法,t-SNE尤擅将相似实例紧密聚合,从而揭示出原本可能隐藏的局部聚类与流形结构。这使其成为从基因组研究到解析深度神经网络内在逻辑等各类研究中不可或缺的工具。
t-SNE的核心思想在于将数据点间的相似性转化为联合概率。在原始高维空间中,该算法通过高斯分布衡量点与点之间的相似度。 若两点距离较近,则其成为"邻居"的概率较高。随后算法尝试将这些点映射到低维空间(通常为二维或三维),同时保持这些概率关系。
为实现这一目标,该算法在低维映射中采用斯蒂芬斯t分布定义了相似的概率分布。这种特殊分布具有比正态高斯分布更重的尾部,有助于解决"拥挤问题"——即高维空间中的点在投影时容易相互重叠的现象。 通过在可视化中拉开相异点之间的距离,t-SNE生成清晰可辨的聚类,从而揭示训练数据的潜在结构。该算法通过最小化高维与低维概率分布间的散度,在无监督学习中有效习得最佳映射表示。
t-SNE是探索性数据分析(EDA)和模型诊断的标准工具。它使工程师能够"观察"模型正在学习的内容。
区分t-SNE与主成分分析(PCA)——另一种常见的降维技术——至关重要。
数据预处理中常见的最佳实践是: 首先采用PCA将数据降维至可控规模(例如50维), 随后应用t-SNE进行最终可视化。 这种混合方法既能减轻计算负荷, 又能过滤可能影响t-SNE结果的噪声。
下面的示例演示了如何使用 scikit-learn 将t-SNE应用于合成数据集。该工作流
模拟了从深度学习模型中提取特征进行可视化的过程。
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.manifold import TSNE
# Generate synthetic high-dimensional data (100 samples, 50 features, 3 centers)
X, y = make_blobs(n_samples=100, n_features=50, centers=3, random_state=42)
# Apply t-SNE to reduce dimensions from 50 to 2
# 'perplexity' balances local vs global aspects of the data
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_embedded = tsne.fit_transform(X)
# Plot the result to visualize the 3 distinct clusters
plt.scatter(X_embedded[:, 0], X_embedded[:, 1], c=y)
plt.title("t-SNE Projection of High-Dimensional Data")
plt.show()
尽管功能强大,t-SNE仍需谨慎调整超参数。其中"困惑度"参数至关重要——它本质上是推测每个点拥有多少近邻。设置过低或过高都可能导致可视化结果产生误导。 此外,t-SNE对全局距离的保留性较差—— 即图中两个不同聚类间的距离 未必反映原始空间中的实际距离。 尽管存在这些局限,该算法仍是验证计算机视觉(CV)架构 及解析复杂数据集的核心技术。 处理大规模数据集的用户常Ultralytics 对数据进行预处理, 再开展深度分析。