探索 t-SNE 如何可视化高维数据。了解如何揭示 Ultralytics YOLO26 计算机视觉特征中的聚类并优化机器学习模型。
t 分布随机邻域嵌入 (t-SNE) 是一种统计方法,通过为每个数据点在二维或三维地图中赋予一个位置来可视化高维数据。这种技术是一种非线性降维形式,在机器学习中被广泛使用,用于探索包含数百或数千个特征的数据集。与侧重于保留全局结构的线性方法不同,t-SNE 擅长将相似实例保持在一起,揭示可能隐藏的局部簇和流形。这使其成为从基因组研究到理解深度神经网络内部逻辑等各个领域的重要工具。
t-SNE 的核心思想是将数据点之间的相似性转换为联合概率。在原始高维空间中,算法使用高斯分布测量点之间的相似性。如果两个点彼此靠近,它们被认为是“邻居”的概率很高。然后,算法尝试将这些点映射到较低维空间(通常是二维或三维),同时保持这些概率。
为此,它使用 Student's 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 仍需要仔细的超参数调优。“困惑度”(perplexity)参数至关重要;它本质上是猜测每个点有多少个近邻。设置过低或过高都可能导致误导性的可视化结果。此外,t-SNE 不能很好地保留全局距离——这意味着图中两个不同簇之间的距离不一定反映它们在原始空间中的物理距离。尽管存在这些细微差别,它仍然是验证计算机视觉 (CV)架构和理解复杂数据集的基石技术。管理大规模数据集的用户通常会利用Ultralytics Platform来组织数据,然后再进行此类深入分析。
开启您的机器学习未来之旅