主成分分析和因子分析是数据挖掘中常用的方法,帮助我们对原始数据有更好的理解,同时也可以实现降维等操作,为后续工作提供便利。
但是有一些博客的介绍中,其中数学推导的部分过多,没有很好地跟实际例子结合到一起,通俗易懂地解释这两个东西。我更想更需要直白的解释。
PCA
何谓主成分分析,其实大家通常意义说的那个借助于特征值和特征向量的PCA方法,应该叫做“基于方差最大化的特征主成分分析”。
真正的主成分分析,应该是所有能够对数据实现主要成分表示的方法的总的称谓。
因为,主成分分析的目标是:
Xm∗nBn∗k=Cm∗k
其中,
Xm∗n 表示
m 行
n 列的样本矩阵,
B 表示
k 维空间的基底矩阵,
Cm∗k 表示原始数据
X 经过空间变换
B 之后,得到的新空间内的数据。其中的
B 是特征主成分的表示
如何表示 B 有很多种角度,也就意味着有很多种主成分分析方法。
先讲“基于方差最大化的特征主成分分析-PCA”,我们暂且还是这么叫它为PCA。
PCA一开始就没打算
直接对数据怎么样,
而是研究维度之间的关系,将维度简化,比如去掉相关性之类的,或者是去掉一些用处不大的维度。
假设样本矩阵
去中心后,表示为
Z 。
如果从线性相关性入手研究的话,就必须要提到协方差矩阵
ZTZ ,注意其是
n∗n 的,表示的是维度之间的协方差关系。啥叫两个随机变量
M,N 的协方差,就是:
Cov(M,N)=E(M−M¯¯¯¯)(N−N¯¯¯)=1m∗∑mi=1(mi−Mi¯¯¯¯¯)(ni−Ni¯¯¯¯)
刚好 Cov(A,A)=1m∗ZTZ 。 m表示样本数量,是常数。
协方差在一定程度上描述了维度之间的线性关系,为什么呢?
因为线性相关系数
ρXY=Cov(X,Y)D(X)√D(Y)√ ,协方差是分子部分,可以描述方差意义下的相关性。
这个协方差矩阵是否可以缩减一下,(有些维度是线性相关性很强的,并且我们如果把主要信息所在的维度)如果可以把相关性这层关系表示成另外一种简化形式,岂不是更好。
这个时候就需要特征值和特征向量的登场了。
对某个矩阵
A 来说,如果存在不是零向量的
β 使得
Aβ=λβ ,则称
β 为矩阵
A 的特征向量,
λ 为矩阵
A 的特征值。
从空间变换上来看,
β 这个向量有个很好的特点,就是
矩阵 A 经过 β 的变换之后,还在 β 这个方向上,只不过是数值大小(包括正负)会出现变化。
怎么解释特征值呢,就是数据在特征向量方向上的方差。方差越大,信息量越大。(可否理解为方差越大,不确定性越大,信息量越大。方差小的表示本维度的值波动范围小,对样本标签的预测也就无法很好地预测,方差大的才能更好地。)
那么,这样就好了,我们对维度之间的关系矩阵,进行特征值分解,
ZTZ=QΛQT 就找到了特征向量,Q是由特征向量正交单位化之后组成的。
于是将维度之间的关系矩阵,表示在了特征向量为基底的空间内,得到
ZTZ[β1,β2,...βn]=[λ1β1,λ2β2,....λnβn] ,其中的
λ 表示的是在各个基底方向上的大小(一个数据在三维中的表示为(1000,999,1),当然可以认为x,y维度上更重要)。
(1)
ZTZ 刚好是实对称矩阵,所以可以谱分解为上述形式。
(2)Q也可以不单位正交化。
根据原始维度之间的协方差关系,可以找到新的维度空间(特征向量为基底表示的空间),且能够变换过去,且不同特征值之间的特征向量线性不相关(所以有人也说是去相关)。
选择
λ 较大的前几个,作为新的特征基底,比如
[λ1,λ2,λ3] (到这里,主成分分析算是完毕了,主要成分都已经找到了),对原始数据进行空间变换
X[λ1,λ2,λ3]=[Xλ1,Xλ2,Xλ3] ,将其表示在新的基底下,就是保留了较大方差的新数据(实现了降维)(因为方差小的维度对分类判断没有太大作用,去掉了认为数据损失不大,这个限度就看你取前几个最大的占所有的比例)。
我们看到,主成分是指的维度的主成分,此处用的是方差最大的一种主成分分析,当然还可以用其他标准来分析其主成分,所以主成分分析是个很大的概念。
Factor Analysis
因子分析,实际上应该叫做公共因子分析,为什么呢?看其定义:
X=AF+ε
X 表示原始数据,
F 表示公共因子,
ε 是特殊因子
因子分析的原理是假设原始的数据是由公共因子(公共维度)与误差因子(非公共维度)构成的,如上式所写。(但因子分析更关心公共因子,对特殊因子不甚关心)
那么,问题来了,如何找到公共因子呢?
我从一个易于理解的角度,为大家解析基于特征向量的公共因子分析,而不是从很恐怖的统计角度。
我仅仅是去凑出公共因子分析的定义形式,然后去比对着定义找公共因子。其中很多地方是与
任浩同学的讨论明白的。
我们先尝试对上式变形运算:
XTX=(AF+ε)T(AF+ε)
先看右侧,我们将非公共部分去掉,得到:
XTX≈(AF)T(AF)
注意此处的约等于不是抽取公共因子(用少量公共因子)之后造成的约等,而是因为去掉了特殊因子造成的约等。
XTX=VΛVT 实对称矩阵的特征值分解,此处不做单位化处理。
XTX=[β1,β2,...,βn]⎡⎣⎢⎢⎢λ1λ2...λn⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢⎢β1β2...βn⎤⎦⎥⎥⎥⎥
XTX=[λ1−−√β1,λ2−−√β2,...,λn−−√βn]⎡⎣⎢⎢⎢⎢λ1−−√β1λ2−−√β2...λn−−√βn⎤⎦⎥⎥⎥⎥
对比上式:
XTX≈(AF)T(AF) 看着形式是一样的,并且符合了定义的公共因子的样子。
如果从
[λ1−−√β1,λ2−−√β2,...,λn−−√βn] 抽取几个
β 作为公共因子,岂不是个很好的想法。
于是,就有了公共因子。
此处的左侧
XTX ,怎么看着这么眼熟,是不是跟前面提到的协方差矩阵很像。哈哈,是的,很像。
但是请注意:这里可以不用去中心化,因为没有严格的去研究维度之间的相关性,而是单纯的做了转置再乘以自身(当然也可以去中心化),这种变形运算是为了凑出右侧乘的形式,以便于跟定义的公共因子的样子相近。
至此,公共因子的抽取也就结束了,至于公共因子旋转之类的操作,是为了使得公共因子更具有可解释性,暂时还不做解释了。
还有如何利用公共因子去分析原始维度的重要性,这里也不做赘述了,大家自己上网搜索了解吧。
公共因子的形式可以有很多种,都能凑出定义的形式来,那么也就有很多因子分析方法了。
小结
PCA和FA是很常用的因素分析方法,他们之间既有联系又各不相同。
主成分分析,是分析维度属性的主要成分表示。
因子分析,是分析属性们的公共部分的表示。