Greeting!
特征值与特征向量是大学线性代数与统计学课程里的内容,当年强背了过去,并没有真正理解过这个问题。为了以后学习统计学习方法更方便,在此记录下学习文章以加深理解。(个人观点,如有错漏请提出)
抽象理解
特征值(eigenvalue)和特征向量(eigenvector)具有共同前缀 eigen- ,其起源于德语,意为“特征”。首先我们应该充分理解“特征”的含义:对于线性代数而言,特征向量和特征值体现了矩阵的本质,“特征”强调了单个矩阵的特点,相当于它的ID card。
从线性代数的角度出发,如果把矩阵看作n维空间下的一个线性变换,这个变换有很多的变换方向,我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵(变换)。其中的N个变化方向,就是这个矩阵最重要的“特征”。
有了特征的概念后,我们又如何理解特征值与特征向量呢?可以作这样比喻:
- 如果把矩阵看作是位移,那么特征值 = 位移的速度,特征向量 = 位移的方向。
- 特征向量在一个矩阵的作用下作伸缩运动,伸缩的幅度由特征值确定(注意观察定义式)。特征值大于1,所有属于此特征值的特征向量变长;特征值属于(0, 1),特征向量缩短;特征值小于0,特征向量则反向延长。
我们都知道线性代数中,左乘一个矩阵是对应着行变换,右乘一个矩阵对应列变换,其实际的作用也就是对常规坐标系进行了迁移。那么,【重点】对于在普通二维坐标系下的向量
,它在矩阵 描述空间中的表示与自己单纯的进行拉伸或者缩放的效果一致,满足这种特殊性的 就是特征矩阵,对应的拉伸量 就是特征值。 有了这个特殊的性质,特征向量与特征值出现在很多有矩阵运算的地方,如主成分分析(PCA)、奇异值分解(SVD)等机器学习方法中更是时常提到。至于PCA与SVD的基本思想,请看我接下来的科普文章。
关于定义
设A是n阶矩阵,如果存在常数
和n维非零向量X,
使得
则称
为矩阵A的一个
特征值(标量),X为矩阵A对应于特征值的一个
特征向量(
)
该式子可理解为向量x在几何空间中经过矩阵A的变换后得到向量
。由此可知,向量
经过矩阵A变换后,只是大小伸缩了
倍。总而言之:
特征向量提供了复杂的矩阵乘法到简单的数乘之间的转换!- 并且,我们有以下推论:
其中第三个是特征值分解公式,
为
的
特征向量矩阵(n个大小为
的特征向量
组成)。
是包含对应特征值的
对角矩阵。根据不同的特征值的大小,可以知道每个特征向量对应权重,即其重要性。
- 从解题的角度,我们再来谈谈如何求特征值和特征向量:
设向量a为矩阵A对应于特征值 λ 的特征向量,
即
则有:
所以求解a就是求解
中
的非零解。
其中I是单位矩阵,因此
称为A的
特征多项式。
前置知识
(1)方差、协方差、相关系数、协方差矩阵
方差
方差用来度量随机变量 X 与其数学期望 E(X) 的偏离程度,公式为:
方差总是一个非负数,当随机变量的可能值集中在数学期望的附近时,方差较小;反之方差大。由方差的大小可以推断随机变量分布的分散程度。
协方差
协方差用来刻画两个随机变量 X , Y 的相关性,公式为:
如果协方差为正,说明X,Y同向变化,协方差越大说明同向程度越高;如果协方差为负,说明X,Y反向运动,协方差越小说明反向程度越高。
对上述“同向”和“反向”的理解:
1)你变大,同时我也变大,说明两个变量是同向变化的,这时协方差就是正的。
2)你变大,同时我变小,说明两个变量是反向变化的,这时协方差就是负的。
3)从数值来看,协方差的数值越大,两个变量同向程度也就越大。反之亦然。
相关系数
用随机变量X,Y的协方差除以X的标准差和Y的标准差,公式为:
相关系数也可以看成是协方差:一种剔除了两个变量量纲,标准化后的协方差。
相关系数是一种标准化后的协方差,有以下特点:
1)也可以反映两个变量变化时是同向还是反向,如果同向变化就为正,反向变化就为负。
2)它消除了两个变量变化幅度的影响,而只是单纯反应两个变量每单位变化时的相似程度。
对于两个随机变量:
1)当他们的相关系数为1时,说明两个变量变化时的正向相似度最大,即,你变大一倍,我也变大一倍;你变小一倍,我也变小一倍。也即是完全正相关(以X、Y为横纵坐标轴,可以画出一条斜率为正数的直线,所以X、Y是线性关系的)。
2)随着他们相关系数减小,两个变量变化时的相似度也变小,当相关系数为0时,两个变量的变化过程没有任何相似度,也即两个变量无关。
3)当相关系数继续变小,小于0时,两个变量开始出现反向的相似度,随着相关系数继续变小,反向相似度会逐渐变大。
4)当相关系数为-1时,说明两个变量变化的反向相似度最大,即,你变大一倍,我变小一倍;你变小一倍,我变大一倍。也即是完全负相关(以X、Y为横纵坐标轴,可以画出一条斜率为负数的直线,所以X、Y也是线性关系的)。
协方差矩阵
- 协方差只能处理二维问题,即两个随机变量的相关程度。
- 维数多了就需要计算多个协方差,于是出现了协方差矩阵。
- 协方差矩阵的每一个值就是对应下标的两个随机变量的协方差(即相关程度)。
可以看出,协方差矩阵是一个对称矩阵,而且对角线是各个维度的方差。
python代码举例:
import numpy as np
X = np.array([[-2.1,-1,4.3],[3,1.1,0.12],[3,1.1,0.12]])
#每一行代表一个随机变量,每列代表随机变量的值
#[[-2.1,-1,4.3],
# [3,1.1,0.12],
# [3,1.1,0.12]]print(np.cov(X))
#[[ 11.71 , -4.286 , -4.286 ],
# [ -4.286 , 2.14413333, 2.14413333],
# [ -4.286 , 2.14413333, 2.14413333]])
应用实例分析——机器学习中的分类问题
机器学习中的分类问题,给出178个葡萄酒样本,每个样本含有13个参数,比如酒精度、酸度、镁含量等,这些样本属于3个不同种类的葡萄酒。任务是提取3种葡萄酒的特征,以便下一次给出一个新的葡萄酒样本的时候,能根据已有数据判断出新样本是哪一种葡萄酒。
问题详细描述:http://archive.ics.uci.edu/ml/datasets/Wine
训练样本数据:http://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data
把数据集赋给一个178行13列(13个特征)的矩阵R,它的协方差矩阵C是13行13列的矩阵,对C进行特征分解,对角化
其中U是特征向量组成的矩阵,D是特征组成的对角矩阵,并按由大到小排列。
然后,令:
就实现了数据集在特征向量上的投影。
【注意】
中的数据列是按照对应特征值的大小排列的,后面的列对应的特征值小,因而去掉以后对整个数据集的影响比较小。比如,现在我们通过上面的公式去掉后面的8列,只保留前5列(
),就相当于将13维的数据通过PCA降到了5维。
Talk is cheap, show me the code!
根据蜥蜴书的内容,后面会专门开一个专栏分享如何使用sklearn库解决上述机器学习问题的code以及对应注释,同步会上传至Github上,敬请期待!