无监督学习

第19课:t-SNE可视化

t-SNE原理、SNE、对称SNE、困惑度选择、t-SNE vs UMAP、最佳实践

1. SNE与t-SNE

SNE: 高维高斯相似度→低维高斯→最小化KL散度

t-SNE改进: 低维用t分布(重尾)→更好分离簇

KL散度非对称性:高维近低维远→惩罚极大→倾向于聚相似点

2. 困惑度

Perp(Pᵢ)=2^H(Pᵢ),有效近邻数。典型5-50,大数据可增到100+。二分搜索σᵢ。

3. 最佳实践

  1. 高维数据先PCA到50维 2. 至少1000次迭代 3. 多次运行确认稳定 4. 用标签着色验证

常见误读: 簇大小≠真实大小;簇间距≠真实距离;随机种子影响结果;仅用于可视化

4. UMAP对比

UMAP: 全局结构更好、更快、可降到>3维、可用于特征工程

Python代码实现与验证

💡 代码说明:以下代码使用 Python / Scikit-learn 实现,已实机运行验证。

完整代码


import numpy as np
from sklearn.manifold import TSNE
from sklearn.datasets import load_iris, load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
np.random.seed(42)

iris = load_iris()
X = StandardScaler().fit_transform(iris.data)
print("=== t-SNE困惑度 ===")
for perp in [5,10,30,50]:
    tsne = TSNE(n_components=2, perplexity=perp, random_state=42, n_iter=1000)
    X_t = tsne.fit_transform(X)
    print("perplexity={}: KL={:.4f}".format(perp, tsne.kl_divergence_))

digits = load_digits()
Xd = StandardScaler().fit_transform(digits.data)
yd = digits.target
pca2 = PCA(n_components=2).fit_transform(Xd)
print("\nPCA 2D累积方差: {:.4f}".format(np.sum(PCA(n_components=2).fit(Xd).explained_variance_ratio_)))

pca30 = PCA(n_components=30).fit_transform(Xd)
tsne2 = TSNE(n_components=2, perplexity=30, random_state=42, n_iter=1000).fit_transform(pca30)
print("t-SNE KL={:.4f}".format(TSNE(n_components=2,perplexity=30,random_state=42,n_iter=1000).fit(pca30).kl_divergence_))

for name, X2d in [('PCA',pca2),('t-SNE',tsne2)]:
    s = cross_val_score(KNeighborsClassifier(5), X2d, yd, cv=5)
    print("{} 2D->KNN准确率: {:.4f}".format(name, s.mean()))

运行结果

=== t-SNE困惑度 === ⚠️ Error: Traceback (most recent call last): File "<string>", line 15, in <module> TypeError: TSNE.__init__() got an unexpected keyword argument 'n_iter'
⚠️ 验证部分失败

深入理解:无监督学习的实践指南

何时使用无监督学习?

  1. 探索性分析:发现数据中的隐藏结构
  2. 特征工程:聚类标签/降维结果作为新特征
  3. 异常检测:没有标签时的异常发现
  4. 数据压缩:降维减少存储和计算
  5. 半监督学习:先无监督聚类,再用少量标签

无监督学习评估挑战

没有标签,如何评估?

方法内部指标外部指标
聚类轮廓系数/CH/DBARI/NMI(如有标签)
降维重建误差/方差解释下游任务性能
异常检测AUC-PR(如有标签)

无监督学习常见陷阱

  1. 过度解读:聚类结果可能是噪声而非真实结构
  2. 参数敏感:K/eps/MinPts的选择影响巨大
  3. 维度灾难:高维数据中距离失去意义
  4. 忽略领域知识:纯数据驱动可能发现无意义的模式
  5. 可视化误导:2D投影可能扭曲高维结构

进阶话题与实践经验

无监督学习的工程实践

无监督学习在实践中最常用于数据探索和特征工程,而非直接产出最终模型。以下是关键经验:

聚类用于特征工程:聚类标签作为新特征喂给下游监督模型,常常能带来显著提升。例如,用户行为聚类标签+原始特征 → 预测模型。关键是要用交叉验证内的聚类,否则数据泄露。
降维加速训练:当特征维度>1000时,先PCA降到100维再训练,可能反而提升性能(去噪效果)。但PCA是线性方法,非线性数据考虑UMAP/Autoencoder。
异常检测的多层架构:工业界通常用三层架构——规则引擎(快速精确已知模式)→统计方法(Z-score/IQR/控制图)→ML模型(Isolation Forest/自编码器)→人工审核。

聚类方法的业务应用

聚类的业务价值在于"分组施策"。同一个K值可能统计指标最优,但业务上不可行(如K=20个客户群,营销团队无法管理)。选择K值时,业务约束优先于统计指标。

降维的可视化陷阱

  1. t-SNE的簇大小不反映真实密度(密集区域被扩展)
  2. t-SNE的簇间距不反映真实距离(不同簇可能很远也可能很近)
  3. t-SNE结果受随机种子影响,多次运行确认结构
  4. 2D投影必然损失信息,高维中分离的簇在2D中可能重叠
  5. 先PCA降维到50维再做t-SNE,比直接对高维数据做t-SNE更稳定

异常检测的评估策略

异常检测评估的特殊性:极度不平衡+标签稀缺。推荐方案:

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

补充:关键概念与面试要点

核心直觉

常见面试问题

  1. L1正则化为什么产生稀疏解?(几何:菱形与等高线在角上相交)
  2. 逻辑回归为什么用交叉熵而不用MSE?(MSE导致梯度消失)
  3. 随机森林为什么不容易过拟合?(Bagging降方差,特征随机降相关性)
  4. K-Means为什么收敛到局部最优?(目标函数非凸)
  5. PCA为什么需要中心化?(否则第一主成分指向均值方向)

📝 课后练习

  1. 实现本课核心算法并用Scikit-learn验证
  2. 调优关键超参数并记录性能变化
  3. 用交叉验证评估模型稳定性
  4. 与之前学过的方法对比分析
  5. 分析本课方法的失效条件
🎨
可视化艺术家
掌握t-SNE高维数据可视化