一、主成分分析(PCA)介绍
什么是主成分分析?
主成分分析是一种用于连续属性降维的方法,把多指标转化为少数几个综合指标。 它构造了原始属性的一个正交变换,将一组可能相关的变量转化为一组不相关的变量,只需要少量变量就可以解释原始数据大部分信息。
主成分分析其实就是一个线性变换,这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。
主成分分析的思想
主成分分析法是一种降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的\(m\)个正交方向,然后对多维变量系统进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统
主成分分析是设法将原来众多具有一定相关性的指标,重新组合成一组新的互相无关的综合指标来代替原来的指标。通常数学上的处理就是将原来\(p\)个指标作线性组合,作为新的综合指标。最经典的做法就是用\(F_1\)(选取的第一个线性组合,即第一个综合指标)的方差来表达,即\(Var(F_1)\)越大,表示\(F_1\)包含的信息越多。因此在所有的线性组合中选取的\(F_1\)应该是方差最大的,故\(F_1\)称为第一主成分。如果第一主成分不足以代表原来\(p\)个指标的信息,再考虑选取\(F_2\)即选第二个线性组合,为了有效地反映原来信息,\(F_1\)已有的信息就不需要再出现再\(F_2\)中,用数学语言表达就是要求\(cov(F_1,F_2)=0\),则称\(F_2\)为第二主成分,依此类推可以构造出第三、第四,……,第\(p\)个主成分。
主成分分析计算步骤
设原始变量\(X_1,X_2,...,X_p\)的n次观测数据矩阵为:
\[
X = \left [
\begin{matrix}
x_{11} & x_{12} & ... & x_{1p} \\
x_{21} & x_{22} & ... & x_{2p} \\
\vdots & \vdots & \vdots & \vdots \\
x_{n1} & x_{n2} & ... & x_{np}
\end{matrix}\right ] = (X_1,X_2,...,X_p)
\]将数据矩阵按列进行标准化,将标准化后的数据矩阵依然记做\(X\)
计算矩阵\(X\)的相关系数矩阵\(R=(r_{ij})_{p \times p}\)
求相关系数矩阵\(R\)的特征值\(\lambda_1 \geq \lambda_2 \geq ... \geq \lambda_p\)
- 确定m个主成分使得
\[
\frac{\sum_{i=1}^m \lambda_i}{\sum_{i=1}^p \lambda_i} \geq \alpha
\]其中\(\alpha\)一般取\(0.85\) - 计算m个相应特征值的单位特征向量\(\beta_1,\beta_2,...,\beta_m\),其中
\[
\beta_i = \left [
\begin{matrix}
\beta_{1i} \\
\beta_{2i} \\
\vdots \\
\beta_{pi}
\end{matrix}
\right ]
\] 计算主成分公式为:
\[
Z_i = X\beta_i=\beta_{1i}X_1+\beta_{2i}X_2+...+\beta_{pi}X_p \quad i=1,2,..,m
\]
即\((Z_1,Z_2,...,Z_m)\)构成新的特征组。
PCA的推导过程
\(F_1,F_2,...,F_m\)是前m个主成分指标,由于\(F_i\)是\(X_1,X_2,...,X_p\)的线性组合,即可以表示为
\[
\left \{
\begin{matrix}
F_1 = a_{11}X_1+a_{12}X_2+...+a_{1p}X_p \\
F_2 = a_{21}X_1+a_{22}X_2+...+a_{2p}X_p \\
... \\
F_m = a_{m1}X_1+a_{m2}X_2+...+a_{mp}X_p \\
\end{matrix}
\right.
\]
根据前面的分析可知:
- \(F_i,F_j\)相互独立,即为\(Cov(F_i,F_j)=0\)
- \(F_1\)是\(X_1,X_2,...,X_p\)一切线性组合中方差最大的,...,\(F_m\)是与\(F_1,F_2,...,F_{m-1}\)独立的\(X_1,X_2,...,X_p\)的一切线性组合中方差最大者。
我们的任务就是要计算出系数\(a_{ij}\),从数学上可以证明原变量相关协方差矩阵的特征值就是主成分的方差,所以前m个特征根就对应前m个最大线性组合的方差,而特征值对应的特征向量就是线性组合的系数,即为:
- $ X\beta_i=\lambda_i\beta_i$
- \(Var(F_i)=\lambda_i\)
- \(\beta_i=(a_{i1},a_{i2},...,a_{ip})\)
二、线性判别法(LDA)介绍
LDA的思想
线性判别法的基本思想是将高维模式下的样本投影到最佳的鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果。投影后保证模式在新的子空间有最大的类间距离和最小的类内距离,即模式在空间中具有最佳的可分离性。
LDA的原理
LDA属于线性分类器,首先来学习二分类LDA的原理:
- LDA的目标是在维护尽可能多的类别差异信息的同时进行维度缩减
- 给出 \(n\)个\(d\)维向量\(x_1,x_2,...,x_n\),其中有\(N_1\)个属于类别\(w_1\),\(N_2\)个属于类别\(w_2\),在所有的投影方式\(y=w^Tx\)中,找到最大的可分离线(求权向量\(w\))。
上图中按照不同的方向投影得到的分类效果是不一样的,显然第二种方法投影分类效果最好。下面对用到的几个变量进行定义:
\(\mu_i\)表示类别\(i\)的中心,上面二分类中两个类的中心就是\(\mu_1,\mu_2\),第\(i\)类中心的计算方法为:
\[
\mu_i = \frac{1}{N_i}\sum_{x \in w_i}{x}
\]
其中\(w_i\)表示第\(i\)类的样本集合,\(N_i\)表示第\(i\)类的样本个数,该等式表达意义其实就是第\(i\)类点的中心位置(位置的平均值)\(\tilde{\mu_i}\)表示第\(i\)类投影后的中心,不难得到:
\[
\tilde{\mu_i}=\frac{1}{N_i}\sum_{x \in w_i}{w^Tx}=w^T\frac{1}{N_i}\sum_{x \in w_i}{x}=w^T\mu_i
\]\(\tilde{S_i}\) 来表示投影后类内的分散程度,它的定义为:
\[
\tilde{S_i} = \sum_{y \in w_i}(y-\tilde{\mu_i})^2
\]
说白了,它其实就是类似一个方差的含义。最终我们定义目标函数:
\[
J=\frac{|\tilde{\mu_1}-\tilde{\mu_2}|}{\tilde{S_1}+\tilde{S_2}}
\]
我们需要最大化目标函数,为什么要这样呢?回忆LDA的思想:LDA使得投影后类间的距离尽量大,在这里就是分子尽量大,还要使得类内的距离尽量小,这里就是分母尽量小。
\[
|\tilde{\mu_1}-\tilde{\mu_2}|^2=(\tilde{\mu_1}-\tilde{\mu_2})(\tilde{\mu_1}-\tilde{\mu_2})^T=w^T(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw=w^TS_bw
\]
上等式中令\((\mu_1-\mu_2)(\mu_1-\mu_2)^T=S_b\),.
定义原第\(i\)类的分散程度为\(S_i\),则
\[
S_i=\sum_{x \in w_i} |x-\mu_i|^2=\sum_{x \in w_i} (x-\mu_i)^T
\]
并令\(S_w=S_1+S_2\),于是得到
\[
\tilde{S_i}=\sum_{y \in w_i}|y-\tilde{\mu_i}|^2=\sum_{x \in w_i}|w^Tx-w^T\mu_i|^2=\sum_{x \in w_i}{w^T(x-\mu_i)(x-\mu_i)^Tw}=w^T(\sum_{x \in w_i}{(x-\mu_i)(x_mu_i)^T})w=w^TS_iw
\]
进一步得到
\[
\tilde{S_1}+\tilde{S_2}=w^TS_ww
\]
于是有
\[
J(w)=\frac{w^TS_bw}{w^TS_ww}
\]
接下来我们需要确定参数\(w\)使得\(J\)达到最大值,在此可用求导来做:
\[
\frac{dJ}{dw}=\frac{d}{dw}[\frac{w^TS_bw}{w^TS_ww}] = 0\Longrightarrow (w^TS_bw)\frac{d[w^TS_ww]}{dw}=(w^TS_ww)\frac{d[w^TS_bw]}{dw} \Longrightarrow (w^TS_bw)(2S_ww)=(w^TS_ww)(2S_bw) \Longrightarrow \frac{w^TS_bw}{w^TS_ww}S_ww=S_bw \Longrightarrow JS_ww=S_bw
\]
最后得到
\[
S_w^{-1}S_bw=Jw
\]
于是问题就简单了,\(J\)即为矩阵\(S_w^{-1}S_b\)的最大特征值,\(w\)为对应的特征向量。下面的步骤就是求解特征向量了...。实际上还有一种化简方法更简单,请看下面化简步骤:
\[
S_bw=(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw=(\mu_1-\mu_2)R
\]
其中\(R=(\mu_1-\mu_2)^Tw\)是一个常量
\[
Jw=S_w^{-1}S_bw=S_w^{-1}(\mu_1-\mu_2)R
\]
于是得到
\[
w=\frac{R}{J}S_w^{-1}(\mu_1-\mu_2)
\]
由于\(\frac{R}{J}\)是一个常数,最后\(w\)向量实际就为
\[
w=S_w^{-1}(\mu_1-\mu_2)
\]
LDA 多分类问题
对于LDA的C分类问题,我们需要\(C-1\)个映射\([y_1,y_2,...,y_{C-1}]\),意味着需要C-1个投影向量\(w_i\),将每一个向量看作一列,这样可以组长一个矩阵\(W=[w_1|w_2|...|w_{C-1}]\)
对于LDA的C分类问题,我们需要\(C-1\)个映射\([y_1,y_2,...,y_{C-1}]\),意味着需要C-1个投影向量\(w_i\),将每一个向量看作一列,这样可以组长一个矩阵\(W=[w_1|w_2|...|w_{C-1}]\),
\[
y_i = w_i^Tx \Longrightarrow y = W^Tx
\]
每一类的分散程度表示为
\[
S_i = \sum_{x \in w_i}(x-\mu_i)(x-\mu_i)^T \quad 其中 \mu_i = \frac{1}{N_i}\sum_{x \in w_i}x
\]
于是类内分算程度常量\(S_w\)表示为
\[
S_w = \sum_{i=1}^C{S_i}
\]
类间的常量为
\[
S_b = \sum_{i=1}^C{N_i(u_i-u)(u_i-u)^T} 其中 \mu = \frac{1}{N}\sum{x} 表示所有数据的中心
\]
本文还需要修改.......