通俗易懂的讲解奇异值分解(SVD)和主成分分析(PCA)
通俗易懂的讲解奇异值分解(SVD)和主成分分析(PCA)
奇异值分解(SVD)和主成分分析(PCA)是机器学习和数据科学领域中非常重要的概念,它们在降维、推荐系统、自然语言处理等领域都有广泛的应用。本文将从特征分解开始,逐步介绍SVD和PCA的基本概念、数学原理及其应用,帮助读者深入理解这两个重要的数学工具。
特征分解
首先,我们简单回顾下特征值和特征向量的定义。在几何学中,矩阵可以看作是一种线性变换,而特征向量就是在这个变换下只发生伸缩,方向不变的非零向量,伸缩的比例就是特征值。
对称矩阵的特征分解
对称矩阵的特征分解具有特殊的意义,因为对称矩阵的特征向量是正交的,这使得对称矩阵的特征分解具有很多优良的性质。
奇异值分解(SVD)
定义
奇异值分解(Singular Value Decomposition,SVD)是线性代数中一种重要的矩阵分解方法,它可以将一个任意的m×n矩阵分解为三个矩阵的乘积:
A = UΣV^T
其中,U和V是正交矩阵,Σ是一个对角矩阵,其对角线上的元素称为奇异值。
奇异值求解
奇异值可以通过求解矩阵A的转置与A的乘积的特征值来获得,具体来说,矩阵A的奇异值是矩阵A^TA的特征值的平方根。
实际计算奇异值
在实际计算中,通常使用数值方法来求解SVD,例如QR算法、Lanczos算法等。
特征值分解和奇异值分解的区别
- 特征值只能作用在一个m×m的正方矩阵上,而奇异值分解则可以作用在一个m×n的长方矩阵上。
- 奇异值分解同时包含了旋转、缩放和投影三种作用,奇异值分解公式中U和V都起到了对A旋转的作用,而Σ起到了对A缩放的作用。特征值分解只有缩放。
主成分分析(PCA)
主成分分析(Principal Component Analysis,PCA)是一种常用的降维方法,它通过寻找数据的主成分(即数据方差最大的方向)来实现降维。PCA可以看作是SVD在数据特征提取上的应用。
SVD在机器学习中的应用
SVD在机器学习领域有广泛的应用,包括但不限于:
- 降维算法:通过保留最大的几个奇异值来实现降维。
- 推荐系统:通过矩阵分解来预测用户对物品的评分。
- 自然语言处理:在词向量表示、主题模型等领域都有应用。
数学基础
矩阵和正交向量
正交向量:若两向量,它们的点积为0,则它们互相称为正交向量,如(1,1,0)和(1,-1,0)。
正交矩阵
正交矩阵是一个方阵,其行向量和列向量都是单位正交向量。
SVD的实现
在Python中,可以使用numpy库的linalg.svd
函数来实现SVD。该函数的参数含义如下:
a
:待分解的矩阵。full_matrices
:是否返回完整的U和V矩阵,默认为True。compute_uv
:是否计算U和V矩阵,默认为True。
PCA与SVD的关系
PCA可以看作是SVD的一个特例。在对数据矩阵进行SVD分解后,通过保留最大的几个奇异值和对应的左奇异向量,就可以实现PCA的降维效果。
如上图所示,黑点是数据点,那么长的那个红箭头就是数据最主要的方向,也就是最显明/差异最明显的特征。求法就是对于所有数据,找出vi使得数据在vi方向上的方差最大,而且vi要满足与v1~v(i-1)张成的空间正交。