降维办法 主成分剖析和因子剖析
初度发布于我的个人文档。(每次都是个人文档优先发布哦)
本文扼要介绍一下主成分剖析和因子剖析的原理,可是不触及详细代码完成。这是因为现在已经有许多现成的软件或库完成了这两个算法,读者只需要一两句简略的指令就能够运用了,所以没有必要在这儿解说。而且你或许会在Python R MATLAB SPSS等多种不同的软件中运用,不管选哪个软件的代码完成都没有特别强的代表性。
主成分剖析
假如你手上有一组数据,例如是咱们的语文数学英语成果。可是现在有一个问题,咱们的试卷出得有那么一点点欠好,咱们的成果都会集在一起了,也便是试卷的区分度不大。现在,咱们有没有办法弥补呢?
留意:这仅仅一个比如罢了,天然是不考虑咱们进行各种改换之后的现实问题,例如这样搞成果会不公平啊什么的。
总归,咱们的中心问题是,有没有办法对现有数据进行改换,使得数据的每一个个别尽或许被分隔。
这便是主成分剖析的一个能够挑选的切入点。
那咱们要挑选什么样的改换呢?以及有没有办法将一个集体之间的不同个别间隔拉远。
以p维正态分布为例进行可行性探究
嗯,对咱们先拿p维正态分布探究一下咱们主意的可行性。
咱们假定p维随机向量X遵守协方差阵为$\Sigma$,均值向量为$\mu$的p维正态分布。
那么X的概率密度函数便是$P(x)=\frac{1}{(2\pi){\frac{p}{2}}|\Sigma|{2}}}e{-\frac{1}{2}(x-\mu)T\Sigma^{-1}(x-\mu)}$,咱们来调查其概率密度等高线,明显,这儿只要e的指数是变量,所以概率密度等高线满意:
$$-\frac{1}{2}(x-\mu)T\Sigma(x-\mu)=C_1$$
也便是$(x-\mu)T\Sigma(x-\mu)=C_2$
咱们能够对$\Sigma $进行谱分化。
谱分化阐明:
依据线性代数的常识咱们能够知道,恣意实对称阵A能够正交相似对角化,即
$\forall 实对称矩阵A,\exist正交阵Q和对角阵\Lambda,使得A=Q\Lambda Q^T$
假如咱们已知A的特征值$\lambda_1,\lambda_2,...,\lambda_n$和对应的特征向量$e_1,e_2,...,e_n$,则
Q=($e_1,e_2,...,e_n$),$\Lambda =diag(\lambda_1,\lambda_2,...,\lambda_n)$
这意味着:
$$A=Q\Lambda Q^T$$
$$=(e_1,e_2,...,e_n)diag(\lambda_1,\lambda_2,...,\lambda_n)(e_1,e_2,...,e_n)^T$$
$$=(\lambda_1 e_1,\lambda_2 e_2,...,\lambda_n e_n)(e_1,e_2,...,e_n)^T$$
$$=\lambda_1 e_1 e_1^T + \lambda_2 e_2 e_2^T +...+ \lambda_n e_n e_n^T$$
$$=\sum_{i=1}^n\lambda_i e_i e_i^T$$
这便是谱分化了。
咱们假定$\Sigma$的特征值为$\lambda_1,\lambda_2,...,\lambda_p$,对应的特征向量为$e_1,e_2,...,e_p$,那么$\Sigma$就能够谱分化为
$\Sigma=\sum_{i=1}^p\lambda_i e_i e_i^T$,将他代入概率密度等高线方程就有,
$(x-\mu)T{(\sum_{i=1}p\lambda_i e_i e_iT)}(x-\mu)=C_2$
也便是,
$$\sum_{i=1}p\frac{[e_i(x-\mu)]T[e_i(x-\mu)]}{C_2}=1$$
这是p维的相似椭圆的方程,当p=2时这便是椭圆方程。
这意味着,概率密度等高线是相同有着长轴和短轴。
因此,这意味着假如咱们将原始变量X进行正交改换将坐标轴旋转到长轴上就能够达到咱们的方针将一个集体之间的不同个别间隔拉远。
演算
接下来,咱们有了方向就能够进行推演了。
咱们要将原始变量X进行正交改换得到新的一组变量,这从几许看便是进行坐标轴旋转。
总归,从代数视点看便是,设p维随机向量X=$(x_1,x_2,...,x_p)$的协方差阵为$\Sigma$。
那么咱们便是要找一组新的变量Z=$(z_1,z_2,...,z_p)$使得(新变量被称为主成分)
$$z_1=a_{11}x_1+a_{12}x_2+...+a_{1p}x_p=a_1^TX$$
$$z_2=a_{21}x_1+a_{22}x_2+...+a_{2p}x_p=a_2^TX$$
...
$$z_p=a_{p1}x_1+a_{p2}x_2+...+a_{pp}x_p=a_p^TX$$
而此刻,$var(z_j)=a_j^T\Sigma a_j,cov(z_j,z_k)=a_j^T\Sigma a_k$
咱们前面说了,咱们希望将一个集体之间的不同个别间隔拉远,也便是要最大化新变量Z的方差,与此同时咱们天然希望各个新变量之间无关也便是:
最大化$var(z_j)$,希望$cov(z_j,z_k)=0$
关于$z_1$来说便是希望最大化$a_1^T\Sigma a_1$,可是明显咱们能够经过无限扩展$a_1$的长度来完成最大化$z_1$的方差,这是咱们不希望看到的。
所以咱们再额定要求$z_1$的长度是1即$a_1^Ta_1=1$。
这样的话其实咱们便是在最大化$a_1^T\Sigma a_1=\frac{a_1^T\Sigma a_1}{a_1^Ta_1}$(留意哦,现在分母为1所以除了等于没除)。
相似地,咱们对$z_2$会要求$a_2Ta_2=1$,而且$cov(z_2,z_1)=a_2T\Sigma a_1=0$
最大化$a_2^T\Sigma a_2$。
以此类推,可是到最后一个变量$z_p$咱们只能要求最小化$a_p^T\Sigma a_p$了,因为这个对应的是前面说的高维椭圆的短轴,是最小的。
那么,怎样进行最小化呢?
一般的教材这儿便是上拉格朗日乘数法了,核算比较复杂我就不说了。给个定论吧。
$\forall a \in R^p,\Sigma \in M_p且\Sigma为对称矩阵。$
设$(\lambda_j,e_j)$为$\Sigma$的特征值、单位特征向量。
那么$$a\neq 0, a⊥e_1,e_2,...,e_{j-1},$$
则$$max \frac{a^T\Sigma a}{a^T a}=\lambda_j在a=e_j时取到最大。$$
使用上述定论就能够知道,X的第j个主成分$z_j=e_j^TX$
且$var(z_j)=e_j^T\Sigma e_j$
留意$(\lambda_j,e_j)$为$\Sigma$的特征值、单位特征向量。
所以$\Sigma e_j =\lambda_j e_j,e_j^Te_j=1$
因此$var(z_j)=e_j^T\Sigma e_j=e_j^T \lambda_j e_j=\lambda_j e^T_je_j=\lambda_j$。
所以,X的第j个主成分$z_j$是其协方差矩阵$\Sigma$的第j个单位特征向量乘以原始变量X,而且第j个主成分的方差便是$\Sigma$第j个特征值$\lambda_j$。
这便是主成分剖析的定论。
更进一步的,假如咱们对原始变量进行标准化然后再进行主成分剖析,能够证明这相当于对原始变量的相关系数矩阵R进行对应的主成分剖析。
降维
从上面的推导咱们能够看到对p维向量进行主成分剖析只能得到p个主成分,好像不能降维啊。那么咱们一般说的降维是怎样回事?
前面咱们知道,第j个主成分的方差便是$\Sigma$第j个特征值$\lambda_j$。
假如咱们将悉数的主成分的方差求和,那便是对$\Sigma$悉数的特征值的求和,也便是$\Sigma$的迹,也便是X各个重量的方差的和。
所以到现在为止咱们还没有丢失任何一点点方差。
假如降维的话就会丢失方差了,这是因为所谓的降维便是将各个特征值从大到小摆放,然后去掉比较小的特征值和对应的主成分。
这样的话就会丢失方差了,也就丢失了部分信息。这便是所谓的使用主成分剖析进行降维。
因子剖析
那么因子剖析是什么?
仍是看学生成果数据吧,从学生的成果上咱们能够看到,优异的学生好像各科成果都很好。或许你还会发现,各科成果高度相关,这意味着他们或许由某一个潜在变量决议(智商)。
因子剖析便是由原始数据寻觅这样的潜变量。
因为潜变量的数量往往少于原始变量的数量,所以因子剖析也是一种降维办法。
因子剖析建立了一个因子模型,它以为原始变量Y是各个潜变量的线性组合,即
$$Y_i=l_{i1}F_1+l_{i2}F_2+...+l_{im}F_m+\epsilon_i$$
其间,$F_j$是潜变量也叫公共因子,咱们假定有m个,当然一般要求m不大于原始变量的个数p。
系数$l_ij$被称为因子载荷,$Y_i$则是原始变量而$\epsilon_i$是相似差错的特别因子。
咱们还对公共因子提了一些根底的要求,首要$F_i,F_j$不相关(正交),$F_i,\epsilon_j、\epsilon_i,\epsilon_j$不相关,来坚持各个变量之间的独立性。
当然,因子模型用矩阵表明更简练,便是
$Y=AF+\epsilon$
那前面说的那些要求用矩阵表明便是:
- $m \le p$
- cov(F,$\epsilon$)=0
- $D_F=var(F)=单位阵I_m$
- $D_\epsilon=var(\epsilon)=diag(\sigma_12,\sigma_22,...,\sigma_p^2) $
而因子模型最重要的新增是协方差阵的矩阵分化:
$var(X)=\Sigma=cov(AF+\epsilon,AF+\epsilon)=Acov(F,F)A{-1}+cov(\epsilon,\epsilon)=AA+D_\epsilon$
演算
那么怎么求解因子模型中不知道的A和$\epsilon$呢?
答案是使用协方差矩阵的矩阵分化:
$\Sigma=AA^{-1}+D_\epsilon$
而前面咱们说过$\Sigma$能够分化为$Q\Lambda Q^T$,其间$Q=($e_1,e_2,...,e_n$),$$\Lambda =diag(\lambda_1,\lambda_2,...,\lambda_n)$
咱们再进行小小的改换,界说$\Lambda_2=(e_1\sqrt{\lambda_1},e_2\sqrt{\lambda_2},...,e_p\sqrt{\lambda_p})$,
则$\Sigma=\Lambda_2 \Lambda_2$。
当$\Sigma$的后p-m个特征值很小的时分,咱们就能够疏忽掉后边的项,用$\Lambda_2$的前m项估量A,然后$D_\epsilon=\Sigma-AA^{-1}$也就能够核算了。
这便是因子剖析的主成分法求解。
主轴因子法
除此之外因子剖析还有一个常用的算法是主轴因子法,推导比较复杂我就只说思路了。
咱们知道
$\Sigma=AA^{-1}+D_\epsilon$
那么假如咱们先估量$D_\epsilon$在分化也能够得到A。
总思路是这样的,不过假如你去翻阅各种材料的话,或许还会遇到约相关阵的说法,
也便是先把原始变量进行标准化然后$\Sigma=原始变量的相关系数R$再界说$R*=R-D_\epsilon=AA$,
然后估量$R^*$再核算A和$D_\epsilon$也是能够的。