python-machine-learning-book-2nd-edition降维技术:PCA与t-SNE可视化

python-machine-learning-book-2nd-edition降维技术:PCA与t-SNE可视化

【免费下载链接】python-machine-learning-book-2nd-edition The "Python Machine Learning (2nd edition)" book code repository and info resource 【免费下载链接】python-machine-learning-book-2nd-edition 项目地址: https://gitcode.com/gh_mirrors/py/python-machine-learning-book-2nd-edition

在处理高维数据时,我们常常面临维度灾难问题——数据维度增加导致计算复杂度上升、模型泛化能力下降。降维技术通过保留关键信息将高维数据映射到低维空间,既简化分析又保留数据本质特征。本文以python-machine-learning-book-2nd-edition项目为基础,详解主成分分析(PCA)与t分布随机邻域嵌入(t-SNE)两种核心降维技术的原理与实践,帮助读者快速掌握高维数据可视化方法。

PCA:线性降维的数学原理与实现

主成分分析(PCA,Principal Component Analysis)是最常用的线性降维方法,通过正交变换将高维特征映射到低维空间,最大化数据方差。其核心思想是找到数据中方差最大的方向(主成分),依次构建低维坐标系。

PCA算法步骤与关键公式

  1. 数据标准化:将特征缩放到均值为0、方差为1的标准正态分布,避免量纲影响。

    from sklearn.preprocessing import StandardScaler
    sc = StandardScaler()
    X_train_std = sc.fit_transform(X_train)  # [code/ch05/ch05.py](https://link.gitcode.com/i/bc1a1a60602e7271111f9a221c9f6a69)
    
  2. 协方差矩阵计算:协方差矩阵反映特征间线性关系,公式为 $C = \frac{1}{n-1}X^TX$。

    cov_mat = np.cov(X_train_std.T)  # [code/ch05/ch05.py](https://link.gitcode.com/i/4d030e9962fefd7c564cf70442173c9e)
    
  3. 特征值分解:对协方差矩阵进行特征值分解,得到特征值(方差贡献)与特征向量(主成分方向)。

    eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)  # [code/ch05/ch05.py](https://link.gitcode.com/i/ab741744ab0f6eefcf1157253e1e9b9e)
    
  4. 主成分选择:按特征值排序,选择前k个主成分,保留累计方差贡献率(通常>85%)。 PCA方差贡献率

    上图展示了葡萄酒数据集(wine.data)的主成分方差分布,前2个主成分累计贡献~60%方差,可有效降维。

  5. 数据映射:通过主成分矩阵将数据投影到低维空间:$X_{pca} = X \cdot W$,其中W为top-k特征向量构成的投影矩阵。

    # 构建投影矩阵W(取前2个主成分)
    w = np.hstack((eigen_pairs[0][1][:, np.newaxis], eigen_pairs[1][1][:, np.newaxis]))  # [code/ch05/ch05.py](https://link.gitcode.com/i/3b79ddc3d94b0f7d159bc81399fc3418)
    X_train_pca = X_train_std.dot(w)  # 投影到2D空间
    

scikit-learn PCA实战与可视化

使用scikit-learn的PCA类可快速实现降维,以葡萄酒数据集分类为例:

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train_std)  # [code/ch05/ch05.py](https://link.gitcode.com/i/a9bc7737d64436ba2180c4e6f320bb9b)

# 逻辑回归分类
lr = LogisticRegression()
lr.fit(X_train_pca, y_train)  # [code/ch05/ch05.py](https://link.gitcode.com/i/faa56c6bcd5bffc19beef095a1656c5d)

降维后的数据在2D空间中可清晰分离: PCA分类结果

上图为训练集投影结果(code/ch05/images/05_04.png),测试集分类准确率达97%(code/ch05/ch05.py)。

t-SNE:非线性数据的流形学习

t-SNE(t-Distributed Stochastic Neighbor Embedding)通过保留局部邻域关系实现非线性降维,适用于高维数据可视化(如文本、图像)。与PCA不同,t-SNE不追求方差最大化,而是通过学生t分布刻画低维空间相似度。

t-SNE核心思想

  1. 高维空间相似度:用高斯分布$p_{j|i} = \frac{\exp(-|x_i-x_j|^2/(2\sigma_i^2))}{\sum_{k\neq i}\exp(-|x_i-x_k|^2/(2\sigma_i^2))}$描述样本对相似度。

  2. 低维空间相似度:用学生t分布$q_{ij} = \frac{(1+|y_i-y_j|^2)^{-1}}{\sum_{k\neq l}(1+|y_k-y_l|^2)^{-1}}$保留局部结构。

  3. 优化目标:最小化KL散度$KL(P|Q) = \sum_i\sum_jp_{ij}\log\frac{p_{ij}}{q_{ij}}$。

代码实现与对比

以半月形数据集为例,对比PCA与t-SNE降维效果:

from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, random_state=123)
X_tsne = tsne.fit_transform(X)  # X为原始高维数据

PCA与t-SNE对比

左图为PCA降维结果(code/ch05/images/05_13.png),半月形数据未分离;右图为t-SNE结果(code/ch05/images/05_14.png),非线性结构被保留。

降维技术选型指南

技术原理优势局限适用场景
PCA线性投影,方差最大化速度快,可解释性强无法处理非线性关系特征去噪、数据压缩
t-SNE非线性流形,保留局部结构可视化效果好计算量大,不适合大数据高维数据可视化(如MNIST、文本嵌入)

更多降维方法(如LDA、核PCA)可参考官方文档,其中核PCA通过核函数(RBF、多项式)将非线性数据映射到高维后再降维,适用于同心圆等复杂分布(code/ch05/images/05_17.png)。

总结与实践建议

  1. 预处理优先:降维前需标准化数据(code/ch05/ch05.py),异常值会严重影响PCA结果。
  2. 维度选择:通过方差贡献率(PCA)或 perplexity参数(t-SNE,通常5-50)调整维度。
  3. 可视化工具:结合matplotlib绘制散点图(code/ch05/ch05.py),或使用seaborn添加分类标签。
  4. 代码复用:项目提供完整案例,包括数据集(wine.data)、PCA实现(ch05.py)及Jupyter教程(ch05.ipynb)。

通过合理选择降维技术,可显著提升模型训练效率(如SVM、神经网络)并揭示数据内在结构,为后续分析奠定基础。

【免费下载链接】python-machine-learning-book-2nd-edition The "Python Machine Learning (2nd edition)" book code repository and info resource 【免费下载链接】python-machine-learning-book-2nd-edition 项目地址: https://gitcode.com/gh_mirrors/py/python-machine-learning-book-2nd-edition

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值