专栏介绍:本栏目为 “2021秋季中国科学院大学周晓飞老师的机器学习” 课程记录,不仅仅是课程笔记噢~ 如果感兴趣的话,就和我一起入门Machine Learning吧🥰
如何理解PCA
PCA是一种降维方法,我们来看下面这个例子:
现在有假设4个2维度样本,每一维度都表示一个属性,比如说(身高,体重)
(4,2)(2,1)(5,6)(1,2)
我们可以得到一个样本矩阵,并将样本矩阵按照行表示:
现在我们要来思考这样一个问题:
有必要用一个两行四列的数据来描述这些样本吗?
- 其实这个问题我们知道答案的,在学习线性代数时,我们就知道了有极大线性无关组,有相似等等,简而言之就是样本矩阵X中的一些向量是可以由极大线性无关组表示的,我们可以通过矩阵变换可以得到基向量,基向量的数目小于原本矩阵中的向量数目,那这不就是降维吗?经过降维之后样本矩阵X被表示为了Y,X与Y的关系是Y=PX,是不是隐隐约约感觉到了降维与矩阵变换(特征值,特征向量…)有关呢?
继续思考这样一个问题:
在数据降维之后,如何才能尽可能多地保留样本信息?
-
首先,留下来的样本一定要尽可能松散,彼此有足够大的区分度,也就是方差要尽可能大。其次,留下来的样本一定要有存在的意义,不可以被别的向量表示,也就是彼此不相关,进一步可以推出协方差为0。
-
总结一下:原始样本矩阵X,降维之后的样本矩阵Y,Y=PX,且Y中的各个样本方差要尽可能大,协方差要尽可能为0。
那PCA不就是相似对角化吗?上来直接求特征值特征向量不就完事儿了吗? 但是事实上好像不是这样的😞
PCA求解步骤
- 将原始数据按列组成n行m列矩阵X
- 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
- 求出协方差矩阵:m为列数
- 求出协方差矩阵的特征值及对应的特征向量
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
- Y=PX即为降维到k维后的数据
为什么要进行零均值化?
为什么样本协方差矩阵与X乘X的转置有关系?
为什么是求协方差矩阵的特征值特征向量?
这完全是数学家们的小巧思啊!一起来看一下吧~
为什么要进行零均值化?
将X的每一行进行零均值化,即减去这一行的均值后,重新对这样一行求均值,会发现均值为0,这会给后面的计算带来很美妙的结论。
可是不禁会想:给每一行减一个数不会给样本带来偏差吗?实际上是不会的,把所有人的身高都减一个值,只相当给样本进行了平移操作而已。
为什么样本协方差矩阵与X乘X的转置有关系?
我们继续来看,1/(n-1)倍的X乘X转置有什么小秘密:
看到最后这个计算结果有没有发现什么呢?在零均值化后A和B的均值都是0,此处再回忆一下样本方差与样本协方差之间的公式:
样本协方差和样本方差都是除n-1而不是n,这是为了保证无偏估计,但是当n足够大时,除n-1还是n是没有任何区别的,并且也不会对PCA的计算带来影响,后面我会解释为什么没有影响。
把均值等于0 带入上一个矩阵,会这不就是一个X的协方差矩阵吗?:
完美地解释了样本矩阵X的协方差为什么与X转置有关系。
为什么是求协方差矩阵的特征值特征向量?
继续回答第三个问题:
在上文的描述中我们已经明确:
Y=PX,Y为降维之后的样本矩阵,对于这个降维结果Y,我们希望他方差尽可能大,协方差为0。
接下来就可以推导出为什么是对协方差矩阵求特征值了
也就是说✨✨
-
我们需要对A矩阵(也就是X的协方差矩阵,它是一个实对称矩阵)进行相似对角化,P矩阵由A的特征向量组成(需要单位化,P是一个正交矩阵),对角化后的结果就是Q,它也是Y的协方差矩阵,对角线上是矩阵A的特征值(也就是方差),其他地方都为0(即协方差=0)由于方差应该尽可能大,所以特征值必须要求从大到小排列。
-
最后我们解释为什么用n或者n-1不会影响PCA的压缩结果,这是因为在矩阵前乘一个常数是不会影响特征向量的,也就是P不会变,投影结果当然也不会变。