好的,我们开始今天的讲座。今天的主题是Python中的特征分解与奇异值分解(SVD),以及它们在降维和推荐系统中的底层实现。 1. 线性代数基础回顾 在深入探讨特征分解和SVD之前,我们需要回顾一些线性代数的基础概念。 向量 (Vector): 一个有序的数值列表。在Python中,通常用NumPy数组表示。 矩阵 (Matrix): 一个二维的数值数组。同样,在Python中,也用NumPy数组表示。 转置 (Transpose): 矩阵的行和列互换。 内积 (Dot Product): 两个向量对应元素相乘再求和。 线性无关 (Linear Independence): 一组向量中,没有一个向量可以表示为其他向量的线性组合。 正交 (Orthogonal): 两个向量的内积为零。 正交矩阵 (Orthogonal Matrix): 一个方阵,其列向量是单位正交向量。正交矩阵的转置等于其逆矩阵。 2. 特征分解 (Eigen Decomposition) 特征分解是一种将矩阵分解为一组特征向量和特征值的技术。只有方阵才能进行特征分解。 特征向量 (Eigenvector): 对于给定 …
Python实现矩阵求逆与SVD分解的数值稳定性:LAPACK与SciPy的底层机制
Python矩阵求逆与SVD分解的数值稳定性:LAPACK与SciPy的底层机制 大家好,今天我们来深入探讨Python中矩阵求逆和奇异值分解(SVD)这两个重要的线性代数操作,以及它们在数值计算中面临的稳定性问题。我们会重点关注SciPy库,因为它底层依赖于LAPACK这一经过高度优化的数值计算库。理解这些底层机制对于编写高效、可靠的科学计算代码至关重要。 1. 矩阵求逆的数值挑战 矩阵求逆在很多领域都有应用,例如求解线性方程组、计算统计模型等。然而,直接计算矩阵的逆在数值上是一个敏感的操作,容易受到舍入误差的影响,尤其是当矩阵接近奇异时。 1.1 病态矩阵与条件数 一个矩阵的“病态”程度可以通过条件数来衡量。条件数定义为矩阵的最大奇异值与最小奇异值的比值,或者等价地,矩阵与其逆的范数的乘积: cond(A) = ||A|| * ||A⁻¹|| 条件数越大,矩阵越接近奇异,求逆的误差也就越大。这是因为在数值计算中,小的扰动可能导致解的巨大变化。 例如,考虑以下矩阵: import numpy as np from scipy import linalg A = np.array([[ …
奇异值分解(SVD):`np.linalg.svd()` 与应用
好的,各位靓仔靓女,欢迎来到今天的线性代数速成班!今天我们要聊的是一个听起来高大上,实则非常实用,而且能让你在面试中显得逼格满满的东东:奇异值分解,简称SVD! 准备好了吗?让我们一起揭开SVD的神秘面纱,看看它到底是个什么神仙操作。 一、什么是奇异值分解?——别怕,一点都不奇异! 想象一下,你手里有一张照片,这张照片可能很大,占用了你大量的存储空间。你想要把它压缩一下,让它变得更小,但又不想损失太多的质量。SVD就像一个魔法棒,它能把这张照片分解成几个部分,让你只保留最重要的部分,从而达到压缩的目的。 更学术一点来说,SVD是一种矩阵分解方法,它可以将任意一个m×n的矩阵A分解成三个矩阵的乘积: A = UΣVᵀ 其中: U 是一个m×m的正交矩阵,它的列向量叫做左奇异向量。 Σ 是一个m×n的对角矩阵,它的对角线上的元素叫做奇异值,通常按照从大到小的顺序排列。 V 是一个n×n的正交矩阵,它的列向量叫做右奇异向量。 Vᵀ 是V的转置矩阵。 是不是感觉有点头大?没关系,我们来一步一步拆解。 1.1 正交矩阵:好兄弟,手拉手! 正交矩阵是指它的列向量都是单位向量,并且两两正交的矩阵。什 …