矩阵运算是机器学习、统计分析和科学计算中计算工作的核心。比如,统计中的许多操作需要矩阵求逆、对角化和矩阵指数。这类操作计算成本高,但可以通过将矩阵分解为一组更小的矩阵来提升计算效率。此类操作通常统称为矩阵分解,且根据得到的小矩阵的性质,有各自的名称。
特征分解是一种矩阵分解方法,其中特征值和特征向量构成这些矩阵的元素。理解矩阵特征分解可为机器学习和数据科学工程师提供数学基础,以理解诸如降维和矩阵近似等方法。阅读本文后,建议学习课程 Linear Algebra for Data Science in R,掌握支撑数据科学的关键数学主题。
什么是特征分解?
特征分解是一种矩阵分解方法,将一个方阵分解为三个相乘的矩阵。之所以称为特征分解,是因为这些矩阵的条目为原方阵的特征值和特征向量。从数学上说,方阵A可以分解为三个矩阵,使得:

其中,P 是A的特征向量矩阵,D 是一个对角矩阵,其非零元素为按顺序排列的特征值,而P-1 是矩阵P的逆矩阵。
特征分解背后的数学
我将通过一个例子展示如何通过解析运算求出方阵的特征分解。我们的示例矩阵是 2x2 方阵A。如果您在矩阵相乘等技巧上有困难,建议先学习我们的 Linear Algebra for Data Science in R 课程,以便熟悉矩阵乘法的工作方式。
要对矩阵A进行特征分解,需要求出该方阵的特征值及其对应的特征向量。我们可以利用矩阵的特征多项式来计算该矩阵的特征值与特征向量。如果您对这一部分不熟悉,请先阅读Characteristic Equation: Everything You Need to Know for Data Science。
根据特征多项式的定义,有:

因此,我们的矩阵A的特征多项式为pA(λ) = λ2 - 18λ + 56。将该多项式等于零可求出其根,从而得到特征值: 
因此,特征值为λ1 = 14与λ1 = 4。由特征值可利用(A - λI)X = 0为每个不同的特征值求解对应的特征向量:
对于 λ1 = 14,代入 14 并求解该齐次线性方程组:

这得到一个一维(即一个基向量)的特征子空间。对λ1 = 4重复同样的过程,得到:

现在我们已经得到了矩阵A的特征值和特征向量,就可以写出A的特征分解:

其中,我们将两个特征向量并排组合构成 P,并按递减顺序将特征值放在矩阵 D 的对角线上。
当然,我们也可以在计算机系统中使用 Python 或 R 完成特征分解。请注意,Python 和 R 可能会给出归一化(0–1 范围)的特征向量(即标准正交基)。在为验证目的从PDP-1 重构矩阵A时,这一点很重要。
特征分解在数据科学中的应用
特征分解在机器学习和统计中发挥重要作用。在机器学习中,特征分解用于降维方法(如 PCA)。在 PCA 中,我们为原始高维坐标寻找新的维度(方向),以尽可能保留信息。矩阵的特征分解给出特征值,而具有最大特征值的特征向量保留的信息更多,因此被指定为数据的主成分。
在 Python 和 R 中执行特征分解
在学会手算特征分解之后,我们也可以用计算机与编程语言(如 Python 与 R)用几行代码来完成。请记住,Python 与 R 计算得到的特征向量是归一化的(相较于诸如 Python 中的 SymPy 等符号计算语言或包)。
Python 中的特征分解
在 Python 中执行特征分解,需要安装并导入 NumPy 模块。下面的代码演示了如何对非对称方阵A进行特征分解:
import numpy as np
A = np.array([[6,8], [2,12]])
eigVals, eigVecs = np.linalg.eig(A)
print(eigVals)
print(eigVecs)技术支持
[ 4. 14.]
[[-0.9701425 -0.70710678]
[ 0.24253563 -0.70710678]]技术支持
D = np.diag(eigVals)
A_reconstructed = eigVecs @ D @ np.linalg.inv(eigVecs)
print(A_reconstructed)技术支持
[[ 6. 8.]
[ 2. 12.]]技术支持
R 中的特征分解
在 R 中可使用内置函数eigen()完成特征分解,因此对小矩阵进行特征分解无需安装和导入额外包。下面的 R 代码对矩阵 A 执行特征分解(R 会按递减顺序排列特征值,因此特征向量的顺序与 Python NumPy 的输出不同):
A <- matrix(c(6,8,2,12), 2,2, byrow = TRUE)
print(A)
eDecomp <- eigen(A)
eigValues <- eDecomp$values
eigVectors <- eDecomp$vectors
print(eigValues)
print(eigVectors)技术支持
[1] 14 4
[,1] [,2]
[1,] -0.7071068 -0.9701425
[2,] -0.7071068 0.2425356技术支持
A_Reconstructed <- eigVectors %*% diag(eigValues) %*% (solve(eigVectors))
print(A_Reconstructed)技术支持
Show in New Window
[,1] [,2]
[1,] 6 8
[2,] 2 12技术支持
特征分解与奇异值分解(SVD)
特征分解与奇异值分解(SVD)是机器学习与科学计算中两种重要的矩阵分解方法。尽管两者都将矩阵分解为三个矩阵,但它们存在一些差异:
- 特征分解仅适用于方阵,而 SVD 既可用于方阵也可用于非方阵。
- 在 SVD 中,分解得到的矩阵包含奇异值;而特征分解得到的是特征值。
- 由于 SVD 能适用于非方阵,其应用范围比特征分解更广。
结论
在这篇简短的线性代数文章中,我们了解了特征分解、如何手算它,以及如何使用 Python 和 R 进行计算。我们还学习了特征分解在 PCA 等机器学习算法中的应用。
如果您立志成为数据分析师或数据科学家,强烈建议学习我们的 Linear Algebra for Data Science in R 课程,以夯实应用数学与编程基础。您也可以报名完整的 Machine Learning Scientist in Python 职业路径,系统学习监督学习、无监督学习与深度学习。
矩阵运算是机器学习、统计分析和科学计算中计算工作的核心。比如,统计中的许多操作需要矩阵求逆、对角化和矩阵指数。这类操作计算成本高,但可以通过将矩阵分解为一组更小的矩阵来提升计算效率。此类操作通常统称为矩阵分解,且根据得到的小矩阵的性质,有各自的名称。
特征分解是一种矩阵分解方法,其中特征值和特征向量构成这些矩阵的元素。理解矩阵特征分解可为机器学习和数据科学工程师提供数学基础,以理解诸如降维和矩阵近似等方法。阅读本文后,建议学习课程 Linear Algebra for Data Science in R,掌握支撑数据科学的关键数学主题。
什么是特征分解?
特征分解是一种矩阵分解方法,将一个方阵分解为三个相乘的矩阵。之所以称为特征分解,是因为这些矩阵的条目为原方阵的特征值和特征向量。从数学上说,方阵A可以分解为三个矩阵,使得:
其中,P 是A的特征向量矩阵,D 是一个对角矩阵,其非零元素为按顺序排列的特征值,而P-1 是矩阵P的逆矩阵。
特征分解背后的数学
我将通过一个例子展示如何通过解析运算求出方阵的特征分解。我们的示例矩阵是 2x2 方阵A。如果您在矩阵相乘等技巧上有困难,建议先学习我们的 Linear Algebra for Data Science in R 课程,以便熟悉矩阵乘法的工作方式。
要对矩阵A进行特征分解,需要求出该方阵的特征值及其对应的特征向量。我们可以利用矩阵的特征多项式来计算该矩阵的特征值与特征向量。如果您对这一部分不熟悉,请先阅读Characteristic Equation: Everything You Need to Know for Data Science。
根据特征多项式的定义,有:
因此,我们的矩阵A的特征多项式为pA(λ) = λ2 - 18λ + 56。将该多项式等于零可求出其根,从而得到特征值:
因此,特征值为λ1 = 14与λ1 = 4。由特征值可利用(A - λI)X = 0为每个不同的特征值求解对应的特征向量:
对于 λ1 = 14,代入 14 并求解该齐次线性方程组:
这得到一个一维(即一个基向量)的特征子空间。对λ1 = 4重复同样的过程,得到:
现在我们已经得到了矩阵A的特征值和特征向量,就可以写出A的特征分解:
其中,我们将两个特征向量并排组合构成 P,并按递减顺序将特征值放在矩阵 D 的对角线上。
当然,我们也可以在计算机系统中使用 Python 或 R 完成特征分解。请注意,Python 和 R 可能会给出归一化(0–1 范围)的特征向量(即标准正交基)。在为验证目的从PDP-1 重构矩阵A时,这一点很重要。
特征分解在数据科学中的应用
特征分解在机器学习和统计中发挥重要作用。在机器学习中,特征分解用于降维方法(如 PCA)。在 PCA 中,我们为原始高维坐标寻找新的维度(方向),以尽可能保留信息。矩阵的特征分解给出特征值,而具有最大特征值的特征向量保留的信息更多,因此被指定为数据的主成分。
在 Python 和 R 中执行特征分解
在学会手算特征分解之后,我们也可以用计算机与编程语言(如 Python 与 R)用几行代码来完成。请记住,Python 与 R 计算得到的特征向量是归一化的(相较于诸如 Python 中的 SymPy 等符号计算语言或包)。
Python 中的特征分解
在 Python 中执行特征分解,需要安装并导入 NumPy 模块。下面的代码演示了如何对非对称方阵A进行特征分解:
R 中的特征分解
在 R 中可使用内置函数
eigen()完成特征分解,因此对小矩阵进行特征分解无需安装和导入额外包。下面的 R 代码对矩阵 A 执行特征分解(R 会按递减顺序排列特征值,因此特征向量的顺序与 Python NumPy 的输出不同):特征分解与奇异值分解(SVD)
特征分解与奇异值分解(SVD)是机器学习与科学计算中两种重要的矩阵分解方法。尽管两者都将矩阵分解为三个矩阵,但它们存在一些差异:
结论
在这篇简短的线性代数文章中,我们了解了特征分解、如何手算它,以及如何使用 Python 和 R 进行计算。我们还学习了特征分解在 PCA 等机器学习算法中的应用。
如果您立志成为数据分析师或数据科学家,强烈建议学习我们的 Linear Algebra for Data Science in R 课程,以夯实应用数学与编程基础。您也可以报名完整的 Machine Learning Scientist in Python 职业路径,系统学习监督学习、无监督学习与深度学习。