目录
-
数学基础
-
基变换
-
特征值,特征向量
-
线性变换
-
协方差
-
矩阵对角化
-
PCA简单实例
简介
PCA全称Principal Component Analysis,即主成分分析,是一种常用的数据降维方法。它可以通过线性变换将原始数据变换为一组各维度线性无关的表示,以此来提取数据的主要线性分量。
数学基础
向量的表示
- 内积
a 1 , a 2 , ⋯ , a n ) T ⋅ ( b 1 , b 2 , ⋯ , b n ) T = a 1 b 1 + a 2 b 2 + ⋯ + a n b n a_{1},a_{2},\cdots ,a_{n})^T\cdot (b_1,b_2,\cdots,b_n)^T = a_1b_1+a_2b_2+\cdots+a_nb_n a1,a2,⋯,an)T⋅(b1,b2,⋯,bn)T=a1b1+a2b2+⋯+anbn
几何解释
A ⋅ B = ∣ A ∣ ∣ B ∣ c o s ( a ) A\cdot B = \left | A \right |\left | B \right |cos(a) A⋅B=∣A∣∣B∣cos(a)
设向量B的模维1 , 则A与B的内积值等于A向B所在的直线投影的矢量长度
向量表示为(3,2)
实际上表示线性组合
x ( 1 , 0 ) T + y ( 0 , 1 ) T x(1,0)^T + y(0,1)^T x(1,0)T+y(0,1)T (1,0)就是X轴,(0,1)就是y轴
基变换
基是正交的(即内积为0 , 或者直观的说相互垂直)
要求: 线性无关
将(3,2)映射到新的基上 xy
变换 : 数据与一个基做内积运算,结果作为第一个新的坐标分量,然后与第二个基做内积运算,结果作为第二个新坐标的分量
将数据(3,2)映射到基中的坐标
基表换 :
特征值,特征向量
若A为n阶方阵 , 如果存在一个非零向量X使得 $ Ax = \lambda x $ 则标量 $ \lambda $ 为特征值(eigenvuale) , x为特征向量(eigenvector)
线性变换
一个矩阵与一个列向量A相乘,得到一个新的列向量B,则称该矩阵未列向量A到列向量B的线性变化
我们希望投影后的尽可能分散,而这种分散程度,用方差来表述
V a r ( a ) = 1 m ∑ i = 1 m ( a i − u ) 2 Var(a)=\frac{1}{m}\sum_{i=1}^{m}\left ( a_{i} -u \right )^{2} Var(a)=m1i=1∑m(ai−u)2
寻找一个一维基,使得所有数据变化大这个基上的坐标表示后,方差值最大
解释: 方差越大,说明数据越分散,通常认为,数据的某个特征维度上数据越分散,该特征就越重要
对于更高的维度,比如3维降到2维,在第1维得到最大的方差值后,我们希望第2维也是有最大方差,很明显,直接得到的第2维于第1维"几乎重合" , 所以它们应该有其他约束条件————正交
解释:从直观上说,让2个坐标尽可能表示更多的原始信息,我们是不希望它们之间存在有(线性)相关性的,因为相关性说明2个字段不是完全独立的,必然存在重复表示的信息
数学上用2个向量的协方差来表示其相关性
C o v ( a , b ) = 1 m ∑ i = 1 m ( a i − μ a ) ( b i − μ b ) Cov(a,b) = \frac{1}{m}\sum_{i=1}^{m}\left (a_{i} - \mu _{a} \right )\left ( b_{i} - \mu _{b}\right ) Cov(a,b)=m1i=1∑m(ai−μa)(bi−μb)
当协方差为0时,表示2个向量线性不相关
所以优化的目标是:
将一组N维向量降为K维(0<K<N),其目标是选择K个单位正交基,使得原始数据变换到这组基上后,各向量间的协方差未0 ,而向量的方差尽可能大
协方差
协方差用于表示变量间的相互关系,变量间的相互关系一般有三种:正相关,负相关和不相关。
** 正相关:**假设有两个变量x和y,若x越大y越大;x越小y越小则x和y为正相关。
** 负相关:**假设有两个变量x和y,若x越大y越小;x越小y越大则x和y为负相关。
** 不相关:**假设有两个变量x和y,若x和y变化无关联则x和y为负相关。
假设有2个变量a和b 构成矩阵X(通常都是sample作为行向量,特征作为列向量)
X = ( a 1 b 1 a 2 b 2 ⋮ ⋮ a m b m ) X = \begin{pmatrix}a_{1} & b_{1}\\ a_{2} & b_{2}\\ \vdots & \vdots\\ a_{m} & b_{m}\end{pmatrix} X=⎝⎜⎜⎜⎛a1a2⋮amb1b2⋮bm⎠⎟⎟⎟⎞
将其转置为sample作为列向量,特征作为行向量:
X = ( a 1 a 2 ⋯ a m b 1 b 2 ⋯ b m ) X = \begin{pmatrix}a_{1} &a_{2} & \cdots &a_{m} \\ b_{1} & b_{2} & \cdots & b_{m}\end{pmatrix} X=(a1b1a2b2⋯⋯ambm)
用 1 m X X T \frac{1}{m}XX^{T} m1XXT 可以得到(不是推导得到的,而是恰好这个公式很好用):
1 m X X T = ( 1 m ∑ i = 1 m a i 2 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m b i 2 ) \frac{1}{m}XX^{T} = \begin{pmatrix}\frac{1}{m} \sum_{i=1}^{m} a_{i}^{2} & \frac{1}{m} \sum_{i=1}^{m} a_{i} b_{i}\\ \frac{1}{m} \sum_{i=1}^{m} a_{i} b_{i} & \frac{1}{m} \sum_{i=1}^{m} b_{i}^{2} \end{pmatrix} m1XXT=(m1∑i=1mai2m1∑i=1maibim1∑i=1maibim1∑i=1mbi2)
同理m个n维数据,将其转置称n*m个矩阵X ,设 C = 1 m X X T C = \frac{1}{m}XX^T C=m1XXT ,则C是一个对称矩阵,其对角线为各个字段的方差,其中第i行j列和第j行i列元素相同
矩阵对角化
实对称矩阵: 一个n*n的实对称矩阵一定可以找到n个单位正交特征向量
E = ( e 1 , e 2 ⋯ e n ) E = (e_{1} , e_{2} \cdots e_{n}) E=(e1,e2⋯en)
实对称阵可进行对角化:
E T C E = Λ = ( λ 1 λ 2 ⋱ λ n ) E^{T}CE = \Lambda =\begin{pmatrix}\lambda _{1} & & & \\ & \lambda _{2}& & \\ & & \ddots & \\ & & & \lambda _{n}\end{pmatrix} ETCE=Λ=⎝⎜⎜⎛λ1λ2⋱λn⎠⎟⎟⎞
根据特征值的从大到小,将特征向量从上到下排列,则用前K行组成的矩阵乘以原数据矩阵X,就得到了我们需要的降维后的数据矩阵Y
PCA简单实例
参考
https://blog.csdn.net/hustqb/article/details/78394058
[图片上传失败…(image-2df3d7-1545210203861)]
协方差矩阵 https://www.youtube.com/watch?v=locZabK4Als
腾讯视频 PCA
https://www.bilibili.com/video/av29441413/?p=2
http://blog.codinglabs.org/articles/pca-tutorial.html
https://blog.csdn.net/hustqb/article/details/78394058
特征值,特征向量
https://www.bilibili.com/video/av6540378?from=search&seid=11885232428903943428
线性代数之六:特征值与特征向量
https://blog.csdn.net/zzulp/article/details/78511711