【机器学习】机器学习中用到的高等数学知识-1.线性代数 (Linear Algebra)

  • 向量(Vector)和矩阵(Matrix):用于表示数据集(Dataset)和特征(Feature)。
  • 矩阵运算:加法、乘法和逆矩阵(Inverse Matrix)等,用于计算模型参数。
  • 特征值(Eigenvalues)和特征向量(Eigenvectors):用于降维(dimensionality reduction)(如主成分分析 PCA(Principal Component Analysis))和理解数据结构。
  • 奇异值分解 (SVD):用于数据降维和矩阵近似。

向量和矩阵

向量

向量是线性代数中的一个基本概念,它是具有大小和方向的数学对象。向量在物理学、工程学、计算机科学和许多其他领域中都有广泛的应用。以下是向量的基本概念、性质和应用。

1. 向量的定义

向量可以用有序的数值集合来表示,通常写作 \mathbf{v}\vec{v}。在 n-维空间中,一个向量可以表示为:

\mathbf{v} = \begin{pmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{pmatrix}

这里,v_1, v_2, \ldots, v_n​ 是向量的分量。

2. 向量的类型

向量可以根据其特征进行分类:

      位置向量的用途
         表示点的位置
:可以用位置向量确定一个点在空间中的具体位置。
         计算点间距离:两个点的距离可以通过它们的相对位置向量计算,例如 \|\mathbf{OP}_1 - \mathbf{OP}_2\|
         空间变换:位置向量可以用于描述平移、旋转等空间操作。

      示例
         若点 A 的坐标为 (3, 4),则其位置向量为:

                                                           \mathbf{OA} = \begin{bmatrix} 3 \\ 4 \end{bmatrix}

         若点 B 在三维空间中的坐标为 (1, -2, 5),则其位置向量为:

                                                        \mathbf{OB} = \begin{bmatrix} 1 \\ -2 \\ 5 \end{bmatrix}                                                    

       位置向量的使用使得我们可以将几何问题转化为向量运算,使得计算更为简洁和直观。

  • 零向量:是向量空间中的特殊向量,它的所有分量都为零。零向量通常用符号 \mathbf{0} 表示,在任意维度的向量空间中都存在。例如:
     

    在二维空间中,零向量为:

    \mathbf{0} = \begin{bmatrix} 0 \\ 0 \end{bmatrix}

    n-维空间中,零向量为:

    \mathbf{0} = \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 0 \end{bmatrix}
    零向量的特点是无方向、无长度,它在向量加法中是单位元,添加到任何向量上都不会改变其值。
  • 单位向量:模(长度)为 1 的向量,通常用于表示方向,单位向量的符号通常为 \hat{i}, \hat{j}​, \hat{k} 或加上帽子符号的其它向量符号。下面是一些常见的单位向量示例:
     

    二维空间中的单位向量:
        沿 x-轴方向的单位向量:
                                                         \hat{i} = \begin{bmatrix} 1 \\ 0 \end{bmatrix}
        沿 y-轴方向的单位向量:
                                                        \hat{j} = \begin{bmatrix} 0 \\ 1 \end{bmatrix}
    三维空间中的单位向量
        沿 x-轴方向的单位向量:
                                                        \hat{i} = \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix}
        沿 y-轴方向的单位向量:
                                                        \hat{j} = \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix}
        沿 z-轴方向的单位向量:
                                                        \hat{k} = \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}

    任意向量的单位化: 对于任意非零向量 \mathbf{v},可以通过将它除以其模长 \|\mathbf{v}\| 来获得单位向量:

                                                       \hat{\mathbf{v}} = \frac{\mathbf{v}}{\|\mathbf{v}\|}

    例如,如果 \mathbf{v} = \begin{bmatrix} 3 \\ 4 \end{bmatrix},则它的模长为 5,单位向量为:

                                         ​​​  \hat{\mathbf{v}} = \frac{1}{5} \begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} 0.6 \\ 0.8 \end{bmatrix}

    单位向量在多种计算中都很有用,尤其是表示方向,而不关注大小。

  • 位置向量(Position Vector):表示空间中一个点的位置的向量,它通常从坐标系的原点 O 指向该点 P,可以表示点的相对位置。位置向量是非常有用的工具,尤其在几何、物理学和工程中,用于描述物体的位置。
     

    位置向量的定义

    在二维和三维空间中,位置向量常以从原点到目标点的矢量形式表示。若点 P 的坐标为 (x, y)(x, y, z),则位置向量 \mathbf{OP} 为:

        二维空间中的位置向量: 若 P = (x, y),则位置向量为:

                                                       \mathbf{OP} = \begin{bmatrix} x \\ y \end{bmatrix}

        三维空间中的位置向量: 若 P = (x, y, z),则位置向量为:

                                                       \mathbf{OP} = \begin{bmatrix} x \\ y \\ z \end{bmatrix}

3. 向量的运算

向量之间可以进行多种运算,包括:

  • 向量加法:将两个相同维数的向量相加,对应分量相加。

    \mathbf{u} + \mathbf{v} = \begin{pmatrix} u_1 + v_1 \\ u_2 + v_2 \\ \vdots \\ u_n + v_n \end{pmatrix}
  • 向量减法:将两个相同维数的向量相减,对应分量相减。

    \mathbf{u} - \mathbf{v} = \begin{pmatrix} u_1 - v_1 \\ u_2 - v_2 \\ \vdots \\ u_n - v_n \end{pmatrix}
  • 数乘:将向量的每个分量乘以一个标量 k

    \mathbf{v} = \begin{pmatrix} kv_1 \\ kv_2 \\ \vdots \\ kv_n \end{pmatrix}

4. 向量的性质

向量具有以下重要性质:

  • 模(长度):向量的模可以通过以下公式计算:

    |\mathbf{v}| = \sqrt{v_1^2 + v_2^2 + \cdots + v_n^2}
  • 点积(内积):两个向量的点积是一个标量,计算方式如下:

    \mathbf{u} \cdot \mathbf{v} = u_1v_1 + u_2v_2 + \cdots + u_nv_n

    点积的结果可以用来判断两个向量的夹角关系,若 \mathbf{u} \cdot \mathbf{v} = 0,则两者正交。

  • 叉积(外积):仅在三维空间中定义,返回一个向量,计算方式为:

    \mathbf{u} \times \mathbf{v} = \begin{pmatrix} u_2v_3 - u_3v_2 \\ u_3v_1 - u_1v_3 \\ u_1v_2 - u_2v_1 \end{pmatrix}

    叉积的结果与两个向量均垂直,其大小等于两个向量夹角的正弦值乘以它们的模。

5. 向量的应用

向量在许多领域中有广泛的应用,包括:

  • 物理学:描述力、速度、加速度等物理量。
  • 工程学:在设计和分析中使用向量表示物体的位置和方向。
  • 计算机图形学:用于表示图形、模型和运动。
  • 机器学习:用于表示数据点和特征,进行分类和聚类。

6. 结论

向量是描述空间中大小和方向的基本工具,理解向量的性质和运算对于学习线性代数、物理学和工程学等领域至关重要。掌握向量的概念和应用能够为解决实际问题提供强有力的支持。


矩阵

矩阵是线性代数中的基本概念之一,它是一个按照矩形阵列排列的数值集合,通常用来表示线性方程组、线性变换、图像处理和其他许多数学和工程问题。以下是矩阵的基本概念、性质及应用。

1. 矩阵的定义

一个矩阵是由 m 行和 n 列的元素(通常是数字)组成的二维数组。矩阵通常用大写字母表示,例如 A,其形式为:

A = \begin{pmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{pmatrix}

这里,a_{ij}​ 是第 i 行第 j 列的元素。

2. 矩阵的类型

矩阵根据其特征可以分为几种类型:

  • 行矩阵:只有一行的矩阵。
  • 列矩阵:只有一列的矩阵。
  • 方阵:行数与列数相同的矩阵(例如 n \times n 矩阵)。
  • 零矩阵:所有元素均为零的矩阵。
  • 单位矩阵:对角线元素为 1,其他元素为 0 的方阵。

3. 矩阵的运算

矩阵之间可以进行多种运算,包括:

  • 加法:两个相同维数的矩阵可以相加,对应元素相加。

    C = A + B \Rightarrow c_{ij} = a_{ij} + b_{ij}
  • 减法:两个相同维数的矩阵可以相减,对应元素相减。

    C = A - B \Rightarrow c_{ij} = a_{ij} - b_{ij}
  • 数乘:矩阵中的每个元素都可以乘以一个标量 k

    B = kA \Rightarrow b_{ij} = k \cdot a_{ij}
  • 矩阵乘法:两个矩阵相乘,只有当第一个矩阵的列数等于第二个矩阵的行数时才能进行。设 Am \times n 矩阵,Bn \times p 矩阵,结果矩阵 C 将是 m \times p 矩阵。

    C = AB \Rightarrow c_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}

4. 矩阵的性质

矩阵有许多重要的性质,包括:

  • 转置矩阵:将矩阵的行和列互换,记作 A^T

    (A^T)_{ij} = a_{ji}
  • :方阵的对角线元素之和,记作 \text{tr}(A)

  • 行列式:方阵的一个标量值,反映了该矩阵的特性(如是否可逆),记作 |A|\det(A)

  • 逆矩阵:若矩阵 A 是可逆的,则存在一个矩阵 A^{-1},使得 AA^{-1} = A^{-1}A = I(单位矩阵)。

5. 矩阵的应用

矩阵在许多领域中有广泛的应用,包括:

  • 线性方程组:可以用矩阵表示和求解线性方程组。
  • 图形变换:在计算机图形学中,矩阵用于进行旋转、缩放和平移等变换。
  • 数据分析:在机器学习和统计学中,矩阵用于表示数据集和执行各种运算。
  • 网络分析:在图论中,邻接矩阵和权重矩阵用于表示网络结构。

6. 结论

矩阵是线性代数的核心工具,提供了一种有效的方式来表示和处理线性关系。掌握矩阵的基本概念、运算和性质对学习更高级的数学和应用至关重要。


矩阵运算

矩阵运算是线性代数的重要组成部分,广泛应用于计算机科学、物理学、统计学和机器学习等领域。主要的矩阵运算包括加法、减法、数乘、矩阵乘法、转置、求逆、以及行列式计算。以下是这些运算的简要概述和应用。

1. 矩阵加法和减法

  • 加法:两个矩阵相加,需要它们的维度相同。对应元素相加形成新的矩阵。

    例如,对于矩阵 A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}B = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix},它们的和为:

    A + B = \begin{bmatrix} 1+5 & 2+6 \\ 3+7 & 4+8 \end{bmatrix} = \begin{bmatrix} 6 & 8 \\ 10 & 12 \end{bmatrix}
  • 减法:与加法类似,减法要求矩阵维度相同,对应元素相减。

2. 数乘(标量乘法)

一个矩阵的每个元素都与同一个标量(数值)相乘,称为数乘。若有矩阵 A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix},标量 c = 3,则:

cA = 3 \times \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix} = \begin{bmatrix} 3 & 6 \\ 9 & 12 \end{bmatrix}

3. 矩阵乘法

矩阵乘法需要左矩阵的列数等于右矩阵的行数,得到一个新的矩阵。假设 Am \times n 矩阵,Bn \times p 矩阵,则 ABm \times p 矩阵,计算方式如下:

(AB)_{ij} = \sum_{k=1}^{n} A_{ik} B_{kj}

例如:

A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B = \begin{bmatrix} 2 & 0 \\ 1 & 2 \end{bmatrix}

AB = \begin{bmatrix} 1\cdot2 + 2\cdot1 & 1\cdot0 + 2\cdot2 \\ 3\cdot2 + 4\cdot1 & 3\cdot0 + 4\cdot2 \end{bmatrix} = \begin{bmatrix} 4 & 4 \\ 10 & 8 \end{bmatrix}

4. 矩阵转置

矩阵转置是将矩阵的行与列互换。对于 A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix},其转置 A^T 为:

A^T = \begin{bmatrix} 1 & 3 \\ 2 & 4 \end{bmatrix}

5. 矩阵求逆

对于方阵 A,如果存在一个矩阵 A^{-1} 使得 AA^{-1} = A^{-1}A = I(单位矩阵),则 A^{-1} 称为 A 的逆矩阵。矩阵求逆仅适用于方阵,且非所有方阵都有逆(只有行列式不为零的矩阵才有逆)。

6. 行列式

行列式是方阵的一个标量值,记为 \det(A),可以用于判断矩阵是否可逆(行列式不为零时矩阵可逆)。例如,对于 A = \begin{bmatrix} a & b \\ c & d \end{bmatrix},行列式 \det(A) = ad - bc

3x3 矩阵的行列式: 对于一个 3 \times 3 的矩阵 A = \begin{bmatrix} a & b & c \\ d & e & f \\ g & h & i \end{bmatrix},行列式为:

\text{det}(A) = a \cdot \text{det}\begin{bmatrix} e & f \\ h & i \end{bmatrix} - b \cdot \text{det}\begin{bmatrix} d & f \\ g & i \end{bmatrix} + c \cdot \text{det}\begin{bmatrix} d & e \\ g & h \end{bmatrix}

这就是通过展开法计算行列式。

Python 示例

使用 NumPy 库可以简便地实现这些矩阵运算:

import numpy as np# 创建矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.array([[2, 0], [1, 2]])# 矩阵加法
print("A + B =\n", A + B)# 矩阵减法
print("A - B =\n", A - B)# 数乘
print("3 * A =\n", 3 * A)# 矩阵乘法
print("A * C =\n", np.dot(A, C))# 矩阵转置
print("A^T =\n", A.T)# 矩阵求逆
try:A_inv = np.linalg.inv(A)print("A inverse =\n", A_inv)
except np.linalg.LinAlgError:print("A is not invertible")# 行列式
det_A = np.linalg.det(A)
print("det(A) =", det_A)

应用

矩阵运算在机器学习、数据科学、图像处理、物理模拟等领域极其重要,尤其在神经网络和线性回归等算法中被广泛应用。


特征值和特征向量

特征值和特征向量是线性代数中重要的概念,在许多科学与工程应用(例如数据降维、图像处理、推荐系统、自然语言处理等)中扮演关键角色。了解特征值和特征向量有助于理解数据中的模式,识别重要的方向和特征。

什么是特征值和特征向量?

假设有一个 n \times n 方阵 A,如果存在一个向量 \mathbf{v} 和一个标量 \lambda,使得:

\mathbf{v} = \lambda \mathbf{v}

那么 \mathbf{v} 就是矩阵 A 的特征向量,\lambda 就是对应的特征值。

解读:
  • 特征向量:在矩阵作用下保持方向不变的向量。
  • 特征值:是标量,表示在矩阵作用下特征向量的拉伸或缩放因子。

如何求特征值和特征向量?

  1. 特征值的求解:特征值的求解基于以下特征方程:

    \det(A - \lambda I) = 0

    其中 I是单位矩阵。通过解这个多项式方程,我们可以找到所有可能的特征值 \lambda

  2. 特征向量的求解:在找到特征值 \lambda 后,代入 \mathbf{v} = \lambda \mathbf{v} 并解线性方程组,可以找到对应的特征向量 \mathbf{v}

示例

假设有矩阵 A

A = \begin{bmatrix} 4 & 1 \\ 2 & 3 \end{bmatrix}

  1. 计算特征值:

    \det \begin{bmatrix} 4 - \lambda & 1 \\ 2 & 3 - \lambda \end{bmatrix} = 0

    展开行列式并解方程,得到特征值。

  2. 代入特征值解出特征向量。

矩阵的特征方程求解步骤如下:

步骤 1:定义矩阵和特征值

设有一个 n \times n 的方阵 A,其特征值定义为满足方程:

A \mathbf{x} = \lambda \mathbf{x}

其中,\mathbf{x} 是特征向量,\lambda 是特征值。

步骤 2:构造特征方程

将方程 A \mathbf{x} = \lambda \mathbf{x} 改写为:

A \mathbf{x} - \lambda \mathbf{x} = 0

这可以进一步表示为:

(A - \lambda I) \mathbf{x} = 0

其中,I 是单位矩阵,\lambda 是特征值。

为了有非零解 \mathbf{x},必须有:

\text{det}(A - \lambda I) = 0

这是特征方程。

步骤 3:展开行列式

计算 \text{det}(A - \lambda I),这是一个关于 \lambda 的多项式。对于 n \times n 的矩阵,展开行列式得到一个 n 次多项式:

\text{det}(A - \lambda I) = p(\lambda)

其中,p(\lambda) 是关于 \lambda 的特征方程。这个多项式的根就是矩阵 A 的特征值。

步骤 4:求解特征值

解方程 p(\lambda) = 0,得到特征值 \lambda_1, \lambda_2, \dots, \lambda_n​。

举个例子

考虑一个 2 \times 2 的矩阵:

\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}

构造特征方程:

A - \lambda I = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} - \lambda \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix} = \begin{pmatrix} 1 - \lambda & 2 \\ 3 & 4 - \lambda \end{pmatrix}

求行列式:

\text{det}(A - \lambda I) = \text{det} \begin{pmatrix} 1 - \lambda & 2 \\ 3 & 4 - \lambda \end{pmatrix} = (1 - \lambda)(4 - \lambda) - 2 \times 3= (1 - \lambda)(4 - \lambda) - 6 = \lambda^2 - 5\lambda - 2

解方程:

\lambda^2 - 5\lambda - 2 = 0

使用求根公式:

\lambda = \frac{-(-5) \pm \sqrt{(-5)^2 - 4(1)(-2)}}{2(1)} = \frac{5 \pm \sqrt{25 + 8}}{2} = \frac{5 \pm \sqrt{33}}{2}

因此,特征值为:

\lambda_1 = \frac{5 + \sqrt{33}}{2}, \quad \lambda_2 = \frac{5 - \sqrt{33}}{2}

这是矩阵 A 的特征值计算过程。
 

使用求根公式来解二次方程的过程是基于二次方程的标准形式和求解方法。二次方程的标准形式为:

ax^2 + bx + c = 0

其中,a、b、c 是常数,且 a ≠ 0。

求根公式的推导

二次方程的求根公式是通过配方或者使用判别式来得到的。具体步骤如下:

步骤 1:标准化二次方程

首先将二次方程写成标准形式:

ax^2 + bx + c = 0

然后,除以 a(假设 a \neq 0):

x^2 + \frac{b}{a}x + \frac{c}{a} = 0

步骤 2:完成平方式

接下来,我们需要通过配方来将方程转化为平方形式。首先,左边部分是一个完全平方式,因此我们将常数项移到右边:

x^2 + \frac{b}{a}x = -\frac{c}{a}

然后在等式两边加上 \left(\frac{b}{2a}\right)^2

\frac{b}{a}x + \left(\frac{b}{2a}\right)^2 = -\frac{c}{a} + \left(\frac{b}{2a}\right)^2

这时左边已经是一个完全平方式:

\left(x + \frac{b}{2a}\right)^2 = \frac{b^2}{4a^2} - \frac{c}{a}

简化右边:

\left(x + \frac{b}{2a}\right)^2 = \frac{b^2 - 4ac}{4a^2}

步骤 3:解出 x

对两边开平方:

x + \frac{b}{2a} = \pm \frac{\sqrt{b^2 - 4ac}}{2a}

最后,解出 x

x = -\frac{b}{2a} \pm \frac{\sqrt{b^2 - 4ac}}{2a}

这就是二次方程的求根公式:

x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

特征值和特征向量的几何意义

特征向量指示矩阵变换作用下保持方向的“固有”方向,而特征值则表示这种“固有”方向的缩放程度。例如:

  • 数据降维:在主成分分析(PCA)中,我们选择数据协方差矩阵的特征向量(即主成分)来保留主要信息。
  • 图像压缩:在图像处理中的奇异值分解(SVD)中,我们可以通过保留矩阵的主要特征向量来减少数据维度。

Python 实现示例

以下代码使用 numpy 库来求矩阵的特征值和特征向量:

import numpy as np# 定义矩阵 A
A = np.array([[4, 1], [2, 3]])# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)

应用场景

  1. 主成分分析(PCA):用于数据降维和特征提取。
  2. 图像处理:特征值分解帮助从图像数据中提取信息。
  3. 稳定性分析:在物理学、工程学中,特征值可用于判断系统的稳定性(例如,控制系统的稳定性与特征值的正负相关)。
  4. 推荐系统:在矩阵分解中,特征值和特征向量帮助识别潜在的用户偏好模式。

特征值和特征向量提供了数据内在结构和变化方向的重要信息,因此在机器学习和数据分析中不可或缺。


奇异值分解 (SVD)

奇异值分解(Singular Value Decomposition, SVD)是一种在矩阵分解和数据分析中非常有用的工具,广泛应用于数据降维、噪声过滤、推荐系统、图像压缩等多个领域。

什么是奇异值分解?

对于任意一个 m \times n 的矩阵 A,可以将它分解为三个矩阵的乘积:

TA = U \Sigma V^T

其中:

  • U 是一个 m \times m 的正交矩阵,称为左奇异向量组成的矩阵。
  • \Sigma 是一个 m \times n 的对角矩阵,称为奇异值矩阵,其中的元素为非负实数,且按照降序排列。这些非零的对角元素就是矩阵 A 的奇异值。
  • V^T 是一个 n \times n 的正交矩阵,称为右奇异向量组成的矩阵。

奇异值分解的结构使得我们可以对矩阵 A 进行有效的压缩和分析。

假设我们有一个 A 矩阵:

 A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix}

步骤 1:计算 A^T AA A^T

为了计算 U\SigmaV,首先需要计算 A^T AA A^T,它们分别的特征值和特征向量会帮助我们求出奇异值和奇异向量。

  1. 计算 A^T A:

 A^T = \begin{pmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{pmatrix}

          然后计算:

 A^T A = \begin{pmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{pmatrix} \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix} = \begin{pmatrix} 35 & 44 \\ 44 & 56 \end{pmatrix}

  1. 计算 A A^T:

 A A^T = \begin{pmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{pmatrix} \begin{pmatrix} 1 & 3 & 5 \\ 2 & 4 & 6 \end{pmatrix} = \begin{pmatrix} 5 & 11 & 17 \\ 11 & 25 & 39 \\ 17 & 39 & 61 \end{pmatrix}​​

步骤 2:计算特征值和特征向量
  1. 计算 A^T A 的特征值和特征向量:

    • A^T A 的特征值即为矩阵 A 的奇异值的平方。
    • 特征向量对应着右奇异向量。
  2. 计算 A A^T 的特征值和特征向量:

    • A^T 的特征值也与矩阵 A 的奇异值相关。
    • 特征向量对应着左奇异向量。
步骤 3:求解奇异值和奇异向量

假设计算出的特征值和特征向量为:

  • 特征值(奇异值的平方):
    • 7.7224 和 0.2776
  • 奇异值(取平方根):
    • \sigma_1 = \sqrt{7.7224} \approx 2.78
    • \sigma_2 = \sqrt{0.2776} \approx 0.53

然后,得到右奇异向量 V 和左奇异向量 U(通过对 A^T AA A^T 的特征向量进行标准化得到)。

步骤 4:构造矩阵 U\SigmaV
  1. 左奇异向量矩阵 U: U 的列由 A A^T 的特征向量组成。假设计算出以下特征向量:

    U = \begin{pmatrix} -0.2298 & 0.8835 & 0.4082 \\ -0.5247 & 0.2406 & -0.8189 \\ -0.8189 & -0.4016 & 0.4082 \end{pmatrix}
  2. 奇异值矩阵 \Sigma:

    \Sigma = \begin{pmatrix} 2.78 & 0 \\ 0 & 0.53 \\ 0 & 0 \end{pmatrix}
  3. 右奇异向量矩阵 V: V 的列由 A^T A 的特征向量组成。假设计算出以下特征向量:

    V = \begin{pmatrix} -0.4046 & 0.9147 \\ -0.9147 & -0.4046 \end{pmatrix}
步骤 5:重构矩阵 A

         通过 U\Sigma V^T,我们可以验证分解的正确性,恢复原矩阵 A

总结

奇异值分解的关键步骤包括:

  • 计算 A^T AA A^T
  • 求解它们的特征值和特征向量。
  • 奇异值是特征值的平方根,右奇异向量来自 A^T A 的特征向量,左奇异向量来自 A A^T 的特征向量。
  • 通过这些步骤,我们可以得到 U\SigmaV 矩阵,从而得到矩阵 A 的奇异值分解。

这个过程在实际应用中可以使用数值计算方法(如通过SVD算法的库函数)来计算。

SVD 的计算方法

  1. 计算矩阵的特征值和特征向量:我们可以通过 A A^TA^T A 的特征值和特征向量来构造 UV 矩阵。
  2. 构造奇异值矩阵:特征值的平方根便是奇异值,将这些奇异值排列在 \Sigma 矩阵的对角线上。

SVD 的几何意义

  • 矩阵 A 的奇异值表示的是矩阵在不同方向上的拉伸或缩放程度。
  • 奇异值较大的方向表示数据中的主要模式,而较小的奇异值方向则表示噪声或不重要的模式。因此,在数据降维中,我们可以保留最大的奇异值所对应的分量,从而获得矩阵的低秩近似。

SVD 的应用

  1. 数据降维:在主成分分析(PCA)中,我们可以使用 SVD 提取出数据的主成分,从而减少数据维度。
  2. 图像压缩:SVD 可以用于对图像进行压缩,通过保留最大的奇异值所对应的主成分来保持图像的大部分信息。
  3. 推荐系统:在协同过滤推荐系统中,SVD 用于用户和物品的隐式特征分解,可以帮助识别用户偏好。
  4. 噪声去除:通过丢弃小奇异值分量,我们可以从数据中去除噪声,提取出主要模式。

Python 示例

以下代码展示了如何使用 NumPy 进行奇异值分解:

import numpy as np# 定义矩阵 A
A = np.array([[3, 1, 1], [-1, 3, 1]])# 进行奇异值分解
U, S, Vt = np.linalg.svd(A)# SVD 分解结果
print("U 矩阵:\n", U)
print("奇异值(对角矩阵的对角元素):\n", S)
print("V 转置矩阵:\n", Vt)# 重构矩阵 A(通过 U * S * Vt)
S_matrix = np.zeros((U.shape[0], Vt.shape[0]))
np.fill_diagonal(S_matrix, S)
A_reconstructed = U @ S_matrix @ Vt
print("重构后的矩阵 A:\n", A_reconstructed)

应用示例:图像压缩

在图像压缩中,我们可以通过 SVD 提取最重要的奇异值分量来降低数据量。例如,若图像被表示为矩阵,SVD 分解后,保留最大的奇异值对应的前几列,可以保留图像的主要特征,同时去除冗余信息。

总结

奇异值分解提供了一种强大的方法来分析数据的主成分结构,有助于降维、数据压缩和模式识别。在实际应用中,SVD 尤其在高维数据处理中被广泛使用,比如文本数据、图像数据和推荐系统等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/472552.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目-jenkins任务的创建和执行

参考内容: jenkins的安装部署以及全局配置 1.编译任务的general 2.源码管理 3.构建里编译打包然后copy复制jar包到运行服务器的路径 clean install -DskipTests -Pdev 中的-Pdev这个参数用于激活 Maven 项目中的特定构建配置(Profile) 在 pom.xml 文件…

【数据库取证】快速从服务器镜像文件中获取后台隐藏数据

文章关键词:电子数据取证、数据库取证、电子物证、云取证、手机取证、计算机取证、服务器取证 小编最近做了很多鉴定案件和参加相关电子数据取证比武赛,经常涉及到服务器数据库分析。现在分享一下技术方案,供各位在工作中和取证赛事中取得好成…

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined

VUE_PROD_HYDRATION_MISMATCH_DETAILS 未明确定义。您正在运行 Vue 的 esm-bundler 构建,它期望这些编译时功能标志通过捆绑器配置全局注入,以便在生产捆绑包中获得更好的tree-shaking优化。 Vue.js应用程序正在使用ESM(ECMAScript模块&#…

git撤销、回退某个commit的修改

文章目录 撤销某个特定的commit方法 1:使用 git revert方法 2:使用 git rebase -i方法 3:使用 git reset 撤销某个特定的commit 如果你要撤销某个很早之前的 commit,比如 7461f745cfd58496554bd672d52efa8b1ccf0b42,可…

Flume和kafka的整合

1、Kafka作为Source 【数据进入到kafka中,抽取出来】 在flume的conf文件夹下,有一个flumeconf 文件夹:这个文件夹是自己创建的 创建一个flume脚本文件: kafka-memory-logger.conf Flume 1.9用户手册中文版 — 可能是目前翻译最完…

JavaSE常用API-日期(计算两个日期时间差-高考倒计时)

计算两个日期时间差(高考倒计时) JDK8之前日期、时间 Date SimpleDateFormat Calender JDK8开始日期、时间 LocalDate/LocalTime/LocalDateTime ZoneId/ZoneDateTIme Instant-时间毫秒值 DateTimeFormatter Duration/Period

支持向量机SVM——基于分类问题的监督学习算法

支持向量机(SVM,Support Vector Machine)是一种常用于分类问题的监督学习算法,其核心思想是通过寻找一个最佳的超平面来将不同类别的数据点分开,从而实现分类。支持向量机广泛应用于模式识别、文本分类、图像识别等任务…

node对接ChatGpt的流式输出的配置

node对接ChatGpt的流式输出的配置 首先看一下效果 将数据用流的方式返回给客户端,这种技术需求在传统的管理项目中不多见,但是在媒体或者有实时消息等功能上就会用到,这个知识点对于前端还是很重要的。 即时你不写服务端,但是服务端如果给你这样的接口,你也得知道怎么去使用联…

SobarQube实现PDF报告导出

文章目录 前言一、插件配置二、使用步骤1.新生成一个Token2.将拷贝的Token加到上文中执行的命令中3.查看报告 三、友情提示总结 前言 这篇博文是承接此文 .Net项目在Windows中使用sonarqube进行代码质量扫描的详细操作配置 描述如何导出PDF报告 众所周知,导出PDF功…

[Codesys]常用功能块应用分享-BMOV功能块功能介绍及其使用实例说明

官方说明 功能说明 参数 类型 功能 pbyDataSrcPOINTER TO BYTE指向源数组指针uiSizeUINT要移动数据的BYTE数pbyDataDesPOINTER TO BYTE指向目标数组指针 实例应用-ST IF SYSTEM_CLOCK.AlwaysTrue THENCASE iAutoState OF0: //读写完成信号在下次读写信号的上升沿或复位信号…

sql注入之二次注入(sqlilabs-less24)

二阶注入(Second-Order Injection)是一种特殊的 SQL 注入攻击,通常发生在用户输入的数据首先被存储在数据库中,然后在后续的操作中被使用时,触发了注入漏洞。与传统的 SQL 注入(直接注入)不同&a…

springboot实现简单的数据查询接口(无实体类)

目录 前言:springboot整体架构 1、ZjGxbMapper.xml 2、ZjGxbMapper.java 3、ZjGxbService.java 4、ZjGxbController.java 5、调用接口测试数据是否正确 6、打包放到服务器即可 前言:springboot整体架构 文件架构,主要编写框选的这几类…

我的第一个PyQt5程序

PyQt5的开发环境配置完成之后,开始编写第一个PyQt5的程序。 方法一:使用将.ui转换成.py文件的方法 import sys from FirstPyQt import Ui_MainWindow from PyQt5.QtWidgets import *#QtCore,QtGui,QtWidgets # from QtTest import Ui_MainWindow#导入Q…

C++ | Leetcode C++题解之第560题和为K的子数组

题目&#xff1a; 题解&#xff1a; class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> mp;mp[0] 1;int count 0, pre 0;for (auto& x:nums) {pre x;if (mp.find(pre - k) ! mp.end()) {count mp[pre - …

DVWA靶场通关——SQL Injection篇

一&#xff0c;Low难度下unionget字符串select注入 1&#xff0c;首先手工注入判断是否存在SQL注入漏洞&#xff0c;输入1 这是正常回显的结果&#xff0c;再键入1 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for…

MYSQL 精通索引【快速理解】

目录 1、什么是索引&#xff1f; 2、索引结构 1.为什么不使用二叉树呢&#xff1f; 2.B树数据结果 3.B树 4.Hash结构 3、索引语法 1.创建索引 2.查看索引 3.删除索引 4、SQL性能分析 1.SQL执行频次 2.慢查询日志 3.profile详情 4.EXPLAIN 5、索引规则 1.最左前缀法则 2.索…

【Framework系列】UnityEditor调用外部程序详解

需求介绍 之前Framework系列有介绍过导表配置工具&#xff0c;感兴趣的小伙伴可以看一看之前的文章《【Framework系列】Excel转Json&#xff0c;配置表、导表工具介绍》。由于导表工具和Unity是两个工程&#xff0c;导表工具不在Unity工程之内&#xff0c;所以在配置生成完成之…

Docker+Django项目部署-从Linux+Windows实战

一、概述 1. 什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;支持在win、mac、Linux系统上进行安装。可以帮助我们在一台电脑上创建出多个隔离的环境&#xff0c;比传统的虚拟机极大的节省资源 。 为什么要创建隔离的环境&#xff1f; 假设你先在有一个centos7.…

[GXYCTF2019]BabyUpload--详细解析

信息搜集 进入界面&#xff0c;直接就是文件上传界面&#xff0c;结合题目&#xff0c;得知考察的是文件上传漏洞。 思路 文件上传漏洞&#xff0c;第一步先看有没有前端校验&#xff1a; 没有前端校验。 我们写一个一句话木马文件&#xff1a; //shell.php GIF89a <…

北京大学c++程序设计听课笔记101

基本概念 程序运行期间&#xff0c;每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址&#xff08;也称“入口地址”&#xff09;。我们可以将函数的入口地址赋给一个指针变量&#xff0c;使该指针变量指向该函数。然后通过指针变量就可以调用这个…