t-SNE聚类

wen IT资讯 26

本文目录导读:

t-SNE聚类

  1. t-SNE 的核心原理(简略)
  2. t-SNE 与聚类的区别
  3. 常见工作流程:t-SNE + 聚类
  4. 代码示例(Python)
  5. 关键参数与注意事项
  6. 何时使用 t-SNE + 聚类?
  7. 常见误区

t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维技术,主要用于高维数据的可视化,它本身不是一种聚类算法,而是将高维数据映射到低维空间(通常是 2D 或 3D),使得在低维空间中,相似的数据点更接近,不相似的点更远。

当我们说“t-SNE 聚类”时,通常是指:

  1. 先用 t-SNE 降维以观察数据的自然分离情况。
  2. 再在 t-SNE 结果上应用聚类算法(如 K-means、DBSCAN)。

t-SNE 的核心原理(简略)

t-SNE 通过以下两步来保持数据的局部结构:

  • 高维空间:计算点之间的条件概率(高斯分布),表示点 i 会选择点 j 作为邻居的概率。
  • 低维空间:使用t 分布(而不是高斯分布)计算相似度,目的是让低维空间中的点更分散,缓解“拥挤问题”。
  • 优化:通过梯度下降最小化两个概率分布之间的 KL 散度(Kullback-Leibler divergence),使得低维空间的布局尽量反映高维空间的邻居关系。

t-SNE 与聚类的区别

特性 t-SNE 聚类(如 K-means)
目标 降维、可视化 分组、发现簇
输出 低维坐标(2D/3D) 簇标签
是否保留全局结构 ❌ 不保留(只保留局部) 通常保留全局距离
是否可重复 每次运行结果可能不同 通常可重复(给定种子)

⚠️ 重要警告:t-SNE 会破坏数据点之间的全局距离和簇大小关系,两个远离的簇在 t-SNE 图中看起来可能很近,只是因为局部结构相似。


常见工作流程:t-SNE + 聚类

步骤

  1. 数据预处理:标准化/归一化。
  2. t-SNE 降维:设置合适的 perplexity(5-50)。
  3. 可视化:画出 2D 散点图,观察是否有自然分离的团块。
  4. 运行聚类算法:在 t-SNE 结果上运行 K-means、DBSCAN 等。
  5. 分析聚类结果:检查聚类是否合理(注意 t-SNE 可能引入伪影)。

代码示例(Python)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 加载数据
digits = load_digits()
X, y = digits.data, digits.target
# 标准化
X_scaled = StandardScaler().fit_transform(X)
# 1. t-SNE 降维
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)
# 2. 可视化(用真实标签着色)
plt.figure(figsize=(5,5))
plt.scatter(X_tsne[:,0], X_tsne[:,1], c=y, cmap='tab10', s=20)"t-SNE visualization (true labels)")
plt.show()
# 3. 在 t-SNE 结果上聚类
kmeans = KMeans(n_clusters=10, random_state=42)
labels = kmeans.fit_predict(X_tsne)
# 可视化聚类结果
plt.figure(figsize=(5,5))
plt.scatter(X_tsne[:,0], X_tsne[:,1], c=labels, cmap='tab10', s=20)"K-means on t-SNE output")
plt.show()

关键参数与注意事项

主要参数

  • perplexity(困惑度):控制平衡局部 vs 全局结构,5-50,越大,考虑邻居越多。
  • learning_rate:10-1000,太大太小都可能导致不收敛。
  • n_iter:迭代次数,通常至少 250。
  • random_state:固定随机种子可重复结果。

使用注意事项

  1. t-SNE 结果不稳定:不同 random_state 或参数会产生不同布局。
  2. 簇的大小、距离、密度无意义:t-SNE 图上的簇大小和距离不能反映真实数据中的簇大小或分离程度。
  3. 不适合用于特征提取:t-SNE 是可视化工具,不应用于后续模型训练(因为它是非参数化、不可逆的)。
  4. 计算复杂度高:对大数据集(>10 万样本)较慢,可用 opticsBarnes-Hut 近似(sklearn 默认已用)。
  5. 可能产生伪影:t-SNE 有时会人为地将随机噪声点分成明显的簇——不要仅凭视觉判断就相信存在真实簇

何时使用 t-SNE + 聚类?

  • 你想探索高维数据中是否存在自然分离
  • 你需要向非技术人员展示数据分布
  • 你准备对比不同聚类算法的视觉效果

不推荐的场景:

  • 需要保留全局距离关系(用 PCA 或 UMAP)。
  • 需要在降维后做特征提取(用 Autoencoder)。
  • 需要可重复、稳定的聚类结果(直接在原始数据上聚类)。

常见误区

误区 解释
“t-SNE 图上的距离代表真实距离” ❌ t-SNE 只保留局部邻居关系,全局距离不可靠
“t-SNE 图上分开的簇就是不同的类别” ❌ 可能只是参数设置导致的假簇
“t-SNE 图上的簇大小代表真实簇大小” ❌ t-SNE 会拉伸或压缩不同区域
“t-SNE 聚类比原始空间聚类更好” ❌ 不一定,可能引入偏差

  • t-SNE 不是聚类算法,而是降维可视化工具
  • 它可以辅助观察数据的自然分组,但不能代替严谨的聚类验证。
  • 如果在 t-SNE 结果上做聚类,务必在原始特征空间验证聚类结果的有效性(如轮廓系数、外部标签比对等)。
  • 推荐替代:对于需要保持全局结构的情况,考虑 UMAP(Uniform Manifold Approximation and Projection)或 PCA(主成分分析)。

抱歉,评论功能暂时关闭!