益阳市网站建设_网站建设公司_云服务器_seo优化
2026/1/21 23:17:12 网站建设 项目流程

一、奇异值分解

  奇异值分解(Singular Value Decomposition, SVD)是一种矩阵因子分解方法,用于将矩阵分解为更简单的形式,从而揭示数据的内在结构和特性。通过保留最大的几个奇异值以及对应的奇异向量,可以近似重构原始矩阵,同时保留主要信息。主成分分析,潜在语义分析等都用到了奇异值分解。

  矩阵的奇异值分解是指将一个非零的实矩阵 \(A \in R^{n\times p}\) 表示为三个矩阵的乘积(因子分解)的形式:

\[A = U\Sigma V^{T} \]

  其中,U 是 n 阶正交矩阵:\(UU^{T} = 1\),V 是 p 阶正交矩阵:\(VV^{T} = 1\)\(\Sigma\) 是由降序排列的非负的对角元素组成的 \(n \times p\) 矩阵对角阵:\(\Sigma = diag(\sigma_{1}, \sigma_{2}, ..., \sigma_{p}), \sigma_{1} \ge \sigma_{2} \ge ... \ge \sigma_{p} ge 0, p = \min(m, p)\)

  \(U \Sigma V^{T}\) 称为矩阵 A 的奇异值分解,\(\sigma_{1}\) 称为矩阵 A 的 奇异值,U 的列向量称为 左奇异向量,V 的列向量称为 右奇异向量。任一实矩阵一定存在奇异值分解,且奇异值不唯一。

  矩阵 A 的奇异值分解可以通过求对称矩阵 \(A^{T}A\) 的特征值和特征向量得到。\(A^{T}A\) 的单位化特征向量构成正交矩阵 V 的列。\(A^{T}A\) 的特征值的平方根为奇异值 \(\sigma\),对齐由大到小排列作为对角线元素构成对角矩阵 \(\Sigma\)。求正奇异值对应的左奇异向量,再求扩充的 \(A^{T}\) 的标准正交基构成正交矩阵 U 的列。具体过程如下:

  首先求 \(A^{T}A\) 的特征值和特征向量:

\[(A^{T}A - \lambda I)x = 0 \]

  得到特征值并将其由大到小排序:

\[\lambda_{1} \ge \lambda_{2} \ge ... \ge \lambda_{p} \ge 0 \]

  将特征值代入方程求解对应的特征向量,并将特征向量单位化,得到单位特征向量构成正交矩阵 V:

\[V = \begin{bmatrix} \vec{v_{1}} & \vec{v_{2}} & ... & \vec{v_{p}} \end{bmatrix} \]

  特征值的平方根构成 \(n \times p\) 矩形对角阵 \(\Sigma\)

\[\Sigma = diag(\sqrt{(\lambda_{1})}, \sqrt{(\lambda_{2})}, ..., \sqrt{(\lambda_{p})}) \]

  对 A 的正奇异值计算 U 的列向量,A 的秩为 r:

\[\vec{u_{j}} = \frac{1}{\sigma_{j}}A\vec{v_{j}}, j = 1,2, ..., r \\ U_{1} = \begin{bmatrix} \vec{u_{1}} & \vec{u_{2}} & ... & \vec{u_{r}} \end{bmatrix} \]

  若 \(n \gt r\),则需要补充额外的正交向量使 U 成为 \(n \times n\) 矩阵。求 \(A^{T}\) 的零空间的一组标准正交基 \(\set{\vec{u_{r+1}}, \vec{u_{r+2}}, ..., \vec{u_{n}}}\)

\[U_{2} = \begin{bmatrix} \vec{u_{r+1}} & \vec{u_{r+2}} & ... & \vec{u_{n}} \end{bmatrix} \\ U = \begin{bmatrix} U_{1} & U_{2} \end{bmatrix} \]

  我们可以在终端中使用 pip 安装 sklearn 机器学习库。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载

pip install scikit-learn -i https://mirrors.aliyun.com/pypi/simple

  国内常用的 pip 下载源列表:

  • 阿里云 https://mirrors.aliyun.com/pypi/simple
  • 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple
  • 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple
  • 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple
import numpy as np
import sklearn.utils.extmathA = np.array([[1, 1], [2, 2], [0, 0]])
U, S, V = np.linalg.svd(A)
print(U)
print(S)
print(V)U, S, V =  sklearn.utils.extmath.randomized_svd(A, n_components=2)
print(U)
print(S)
print(V)

二、主成分分析

  主成分分析(Principal Component Analysis, PCA)是一种常用的无监督学习方法,旨在找到数据中最重要的方向,即方差最大的方向,并用这些方向重新表达数据。

  在主成分分析过程中,首先将数据的每个特征规范化为平均值为 0 方差为 1,以消除不同特征之间量纲的差异,再使用正交变换吧线性相关的原始数据转换为线性无关的新数据(主成分)。主成分彼此正交并且能够最大化地保留原始数据方差地信息。主成分分析主要用于降维和发现数据的基本结构。

  主成分分析可直观解释对数据所在的原始坐标系进行旋转变换,将数据投影到新坐标系的坐标轴上,新坐标系的第一坐标轴、第二坐标轴分别表示第一主成分、第二主成分等。数据在每一轴上的坐标值的平方表示相应变量的方差,并且这个坐标系是所有可能的新坐标系中,坐标轴上的方差的和最大的。

  在数据总体上进行的主成分分析称为 总体主成分分析,在有限样本上进行的主成分分析称为 样本主成分分析。在实际问题中,通常需要在观测数据上进行主成分分析,也就是样本主成分分析。

  传统的主成分分析通过协方差矩阵或相关矩阵的特征值分解进行。现在常用的方法是通过奇异值分解进行主成分分析。特征值分解的结果给出了主成分的方向(特征向量)和每个主成分的方差(特征值)。

  对规范后的样本矩阵 X 进行奇异值分解 \(X = u\Sigma V^{T}\),V 的列向量就是 X 的主成分的方向,主成分矩阵 \(Y = XV\)\(\Sigma\) 则于协方差矩阵的特征值相关。每个主成分的方差贡献率为 \(\frac{\sigma_{i}^{2}}{\sum_{i=1}^{p} \sigma _{i}^{2}}\),用于决定保留多少主成分。

import numpy as npfrom sklearn.decomposition import PCAX = np.random.rand(100, 3)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(X_pca.shape)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询