矩阵分解 SVD

什么是矩阵分解?

  • 矩阵分解是指将一个给定的矩阵拆解为几个具有特定属性的矩阵的乘积。在线性代数中,常见的矩阵分解包括 QR 分解、LU 分解、奇异值分解(SVD)等。这些分解通常用于简化问题,提高计算效率,以及数据压缩和特征提取等
  • 矩阵分解的目的是解析矩阵的结构,提取重要信息,去除噪声,实现数据压缩等。比如在奇异值矩阵分解中,信息都集中在头几个特征向量中,使用这几个向量有可能较好地(即均方差尽可能小地)复原原来的矩阵,同时只需要保留较少的数据

什么是 SVD?

  • 奇异值分解(SVD)是一种强大的矩阵分解技术,常用于数据分析和机器学习中的特征提取、降维和推荐系统等任务

在 sklearn 中,如何使用断的 SVD(又名 LSA)进行降维?

  • 该转换器通过截断奇异值分解 (SVD) 执行线性降维。与 PCA 不同,此估计器在计算奇异值分解之前不会将数据居中。这意味着它可以有效地处理稀疏矩阵
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     >>> from sklearn.decomposition import TruncatedSVD
    >>> from scipy.sparse import csr_matrix
    >>> import numpy as np
    >>> np.random.seed(0)
    >>> X_dense = np.random.rand(100, 100)
    >>> X_dense[:, 2 * np.arange(50)] = 0
    >>> X = csr_matrix(X_dense)
    >>> svd = TruncatedSVD(n_components=5, n_iter=7, random_state=42)
    >>> svd.fit(X)
    TruncatedSVD(n_components=5, n_iter=7, random_state=42)
    >>> print(svd.explained_variance_ratio_)
    [0.0157... 0.0512... 0.0499... 0.0479... 0.0453...]
    >>> print(svd.explained_variance_ratio_.sum())
    0.2102...
    >>> print(svd.singular_values_)
    [35.2410... 4.5981... 4.5420... 4.4486... 4.3288...]