- PCA
-
主成分分析
-
数据原来有
k维
,经过PCA后降至n维
,其中,k<=n
-
问题来了,如何在降维的同时,尽可能地保留原始数据的有用信息呢?
-
最大方差理论就可以,为什么呢?
-
因为,在信号处理中,我们知道有个信噪比(定义为:信号的方差/噪声的方差)的概念,信噪比越大越好,也是就信号的方差越大越好(有用信息越多),噪声的方差越小越好(噪声信息越少),所以,如果数据从
n维
降至k维
后,方差变大,则表示降维的同时保留了更多的有用信息 -
具体怎么增大信息方差呢?见下面推导
1. A ⋅ B = ∣ A ∣ ∣ B ∣ c o s ( a ) A\cdot B=|A||B|cos(a) A⋅B=∣A∣∣B∣cos(a),当 B B B为过原点的单位向量时,可以得到 A ⋅ B = A 向 量 投 影 到 B 向 量 上 的 长 度 A\cdot B=A向量投影到B向量上的长度 A⋅B=A向量投影到B向量上的长度
2. 不同的基可以对同样一组数据给出不同的表示,并且如果基的数量少于向量本身的维数,则可以达到降维的效果,那么如何选择k个基来最大程度地保留原始n维
数据中的有用信息
3.PCA需要先对每一个属性进行零均值化,也就是对每个属性减去该属性在所有样本上的均值,这样所有属性便可以分布在远点周围了
4.一个属性的方差可以看做是每个元素与属性均值的差的平方和的均值,即: V a r ( a ) = 1 m ∑ i = 1 m ( a i − μ ) 2 Var(a)=\frac{1}{m}\sum_{i=1}^m{(a_i-\mu)^2} Var(a)=m1∑i=1m(ai−μ)2,根据第三步可知 μ = 0 \mu=0 μ=0,所以简化为: V a r ( a ) = 1 m ∑ i = 1 m a i 2 Var(a)=\frac{1}{m}\sum_{i=1}^m{a_i^2} Var(a)=m1∑i=1mai2
5.问题转化为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大
6.从直观上说,让两个属性尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个属性不是完全独立,必然存在重复表示的信息,两个属性之间的相关性可以由协方差来表示:
我们知道 X ˉ = 0 \bar{X}=0 Xˉ=0, Y ˉ = 0 \bar{Y}=0 Yˉ=0, 所以有: C o v ( a , b ) = 1 m ∑ i = 1 m a i b i Cov(a,b)=\frac{1}{m}\sum_{i=1}^m{a_ib_i} Cov(a,b)=m1∑i=1maibi ,当协方差为0时,两个属性便相互独立了
7.所以,目标变为:将一组n维
向量降为k维
,其目标是选择k
个单位(模为1)正交基,使得原始数据变换到这组基上后,各属性两两间协方差为0,而属性的方差则尽可能大(在正交的约束下,取最大的k
个方差)
8.现在我们假设有一组二维(两个属性)数据 X X X:
X = ( a 1 a 2 ⋯ a m b 1 b 2 ⋯ b m ) X=\begin{pmatrix} a_1 & a_2 & \cdots & a_m \\ b_1 & b_2 & \cdots & b_m \end{pmatrix} X=(a1b1a2b2⋯⋯ambm)
我们试着算算下面的矩阵惩罚:
C = 1 m X X T = ( 1 m ∑ i = 1 m a i 2 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m b i 2 ) C=\frac{1}{m}XX^\mathsf{T}=\begin{pmatrix} \frac{1}{m}\sum_{i=1}^m{a_i^2} & \frac{1}{m}\sum_{i=1}^m{a_ib_i} \\ \frac{1}{m}\sum_{i=1}^m{a_ib_i} & \frac{1}{m}\sum_{i=1}^m{b_i^2} \end{pmatrix} C=m1XXT=(m1∑i=1mai2m1∑i=1maibim1∑i=1maibim1∑i=1mbi2)
是不是有些熟悉了?对角线上不就是各个方差吗?其他的边边角角不就是两两属性间的协方差吗?
9.设 X X X对应的协方差矩阵为 Y Y Y,而 P P P是一组基按行组成的矩阵,设 Y = P X Y=PX Y=PX,则 Y Y Y为 X X X对 P P P做基变换后的数据。设 Y Y Y的协方差矩阵为 D D D,我们推导一下 D D D与 C C C的关系:
D = 1 m Y Y T = 1 m ( P X ) ( P X ) T = 1 m P X X T P T = P ( 1 m X X T ) P T = P C P T \begin{array}{l l l} D & = & \frac{1}{m}YY^\mathsf{T} \\ & = & \frac{1}{m}(PX)(PX)^\mathsf{T} \\ & = & \frac{1}{m}PXX^\mathsf{T}P^\mathsf{T} \\ & = & P(\frac{1}{m}XX^\mathsf{T})P^\mathsf{T} \\ & = & PCP^\mathsf{T} \end{array} D=====m1YYTm1(PX)(PX)Tm1PXXTPTP(m1XXT)PTPCPT
10.从上面的推导我们可以看出,我们要找的 P P P不是别的,而是能让原始协方差矩阵( C C C)对角化的 P P P,那为什么是要 D D D对角化呢?看看第8步不就明白了吗
11.现在所有焦点都聚焦在了协方差矩阵对角化问题上,而对角化的实现高数课上肯定教过啦:
E T C E = Λ = ( λ 1 λ 2 ⋱ λ n ) E^\mathsf{T}CE=\Lambda=\begin{pmatrix} \lambda_1 & & & \\ & \lambda_2 & & \\ & & \ddots & \\ & & & \lambda_n \end{pmatrix} ETCE=Λ=⎝⎜⎜⎛λ1λ2⋱λn⎠⎟⎟⎞
其中 Λ \Lambda Λ为对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)
12.所以,我们找到了 P = E T P=E^\mathsf{T} P=ET
P P P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是 C C C的一个特征向量。如果设 P P P按照 Λ \Lambda Λ中特征值的从大到小,将特征向量从上到下排列,则用 P P P的前k
行组成的矩阵乘以原始数据矩阵 X X X,就得到了我们需要的降维后的数据矩阵 Y Y Y,PCA方法就此实现了最后,总结下步骤吧:
设有m
条n维
数据。1)将原始数据按列组成
n
行m
列矩阵 X X X2)将 X X X的每一行(代表一个属性)进行零均值化,即减去这一行的均值
3)求出协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^\mathsf{T} C=m1XXT
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前
k
行组成矩阵 P P P6) Y = P X Y=PX Y=PX即为降维到
k维
后的数据
- KPCA
- 我们知道PCA对于非高斯分布的数据的降维效果不太好,所以如果能够有一种非线性的降维方法,可能会解决这个问题
- 至于为什么PCA对于高斯分布数据的降维效果最好,可以从PCA的算法过程来看,我们知道PCA分解出来的是不相关的向量,而在假设高斯模型的前提下,不相关与独立是等价的,这样可以保证投影矩之间相差最大,ICA就是用来处理非高斯模型,分解出来的是独立的向量
- 对于KPCA来说,什么时候用它呢?当数据在低维空间中不是线性可分时,我们可以通过核函数将原始数据映射到高维空间中,通过选择合适的核函数可以达到线性可分的要求,再使用PCA就可以啦
- 核函数的定义:
1. K ( x , y ) = < φ ( x ) , φ ( y ) > K(x, y) = <φ(x), φ(y)> K(x,y)=<φ(x),φ(y)>,其中 x x x和 y y y是低维的输入向量, φ φ φ是从低维到高维的映射, < x , y > <x, y> <x,y>是 x x x和 y y y的内积
2.KPCA中,刚好可以利用核函数的特点,反正我们的目的就是求数据在高维空间的内积而已(协方差矩阵),又何必知道怎么映射的呢? - 常用的核函数有:
1.线性核函数
效果与PCA一样, K ( x , y ) = x T y + c K(x, y) = x^\mathsf{T}y+c K(x,y)=xTy+c
2.多项式核函数
K ( x , y ) = ( a x T y + c ) d K(x, y) = (ax^\mathsf{T}y+c)^d K(x,y)=(axTy+c)d
3.高斯核函数,RBF的典型代表之一
K ( x , z ) = e x p ( − ∣ ∣ x − z ∣ ∣ 2 2 σ 2 ) K(x,z)=exp(-\frac{||x-z||^2}{2\sigma^2}) K(x,z)=exp(−2σ2∣∣x−z∣∣2)
- LDA
-
线性判别分析
-
相比于PCA,LDA是监督学习,也就是需要每个样本的类别标签,可以用于分类任务,同样是基于数据高斯分布的假设,算法思想为:
投影后类内方差最小,类间方差最大
,形象的图可以参见下图:
上图来自这篇博客 -
那么,如何实现上面所提到的思想呢?以二分类为例:
1.假设数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( ( x m , y m ) ) } D=\{(x_1,y_1), (x_2,y_2), ...,((x_m,y_m))\} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 x i x_i xi为 n n n维向量, y i ∈ { 0 , 1 } y_i \in \{0,1\} yi∈{0,1}。我们定义 N j ( j = 0 , 1 ) N_j(j=0,1) Nj(j=0,1)为第 j j j类样本的个数, X j ( j = 0 , 1 ) X_j(j=0,1) Xj(j=0,1)为第 j j j类样本的集合,而 μ j ( j = 0 , 1 ) μ_j(j=0,1) μj(j=0,1)为第 j j j类样本的均值向量,定义 Σ j ( j = 0 , 1 ) \Sigma_j(j=0,1) Σj(j=0,1)为第 j j j类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵),具体公式如下:
μ j = 1 N j ∑ x ∈ X j x ( j = 0 , 1 ) \mu_j = \frac{1}{N_j}\sum\limits_{x \in X_j}x\;\;(j=0,1) μj=Nj1x∈Xj∑x(j=0,1)
Σ j = ∑ x ∈ X j ( x − μ j ) ( x − μ j ) T ( j = 0 , 1 ) \Sigma_j = \sum\limits_{x \in X_j}(x-\mu_j)(x-\mu_j)^T\;\;(j=0,1) Σj=x∈Xj∑(x−μj)(x−μj)T(j=0,1)
2.由于类别只有两类,所以只需要将数据投影到一条直线上就可以了,详见上图,假设投影直线是向量 w w w,则对任意一个样本本 x i x_i xi,它在直线 w w w的投影为 w T x i w^\mathsf{T}x_i wTxi,对于我们的两个类别的中心点 μ 0 μ_0 μ0, μ 1 μ_1 μ1,在在直线 w w w的投影为 w T μ 0 w^\mathsf{T}μ_0 wTμ0和 w T μ 1 w^\mathsf{T}μ_1 wTμ1
3.根据投影后类内方差最小,类间方差最大
思想,我们将文字语言转换为数学表达式:
① 最大化类间距离: ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 2 ||w^T\mu_0-w^T\mu_1||_2^2 ∣∣wTμ0−wTμ1∣∣22
② 同类样本投影点的协方差 w T Σ 0 w w^T\Sigma_0w wTΣ0w和 w T Σ 1 w w^T\Sigma_1w wTΣ1w尽可能的小,即最小化 w T Σ 0 w + w T Σ 1 w w^T\Sigma_0w+w^T\Sigma_1w wTΣ0w+wTΣ1w
综上:
a r g m a x ⏟ w J ( w ) = ∣ ∣ w T μ 0 − w T μ 1 ∣ ∣ 2 2 w T Σ 0 w + w T Σ 1 w = w T ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T w w T ( Σ 0 + Σ 1 ) w \underbrace{arg\;max}_w\;\;J(w) = \frac{||w^T\mu_0-w^T\mu_1||_2^2}{w^T\Sigma_0w+w^T\Sigma_1w} = \frac{w^T(\mu_0-\mu_1)(\mu_0-\mu_1)^Tw}{w^T(\Sigma_0+\Sigma_1)w} w argmaxJ(w)=wTΣ0w+wTΣ1w∣∣wTμ0−wTμ1∣∣22=wT(Σ0+Σ1)wwT(μ0−μ1)(μ0−μ1)Tw
其中,定义类内散度矩阵 S w S_w Sw(也就是类内方差嘛)为:
S w = Σ 0 + Σ 1 = ∑ x ∈ X 0 ( x − μ 0 ) ( x − μ 0 ) T + ∑ x ∈ X 1 ( x − μ 1 ) ( x − μ 1 ) T S_w = \Sigma_0 + \Sigma_1 = \sum\limits_{x \in X_0}(x-\mu_0)(x-\mu_0)^T + \sum\limits_{x \in X_1}(x-\mu_1)(x-\mu_1)^T Sw=Σ0+Σ1=x∈X0∑(x−μ0)(x−μ0)T+x∈X1∑(x−μ1)(x−μ1)T
定义类间散度矩阵 S b S_b Sb(也就是两个均值点间的距离的平方嘛)为:
S b = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T S_b = (\mu_0-\mu_1)(\mu_0-\mu_1)^T Sb=(μ0−μ1)(μ0−μ1)T
所以,综上化简一下优化目标:
a r g m a x ⏟ w J ( w ) = w T S b w w T S w w \underbrace{arg\;max}_w\;\;J(w) = \frac{w^TS_bw}{w^TS_ww} w argmaxJ(w)=wTSwwwTSbw上面的优化目标其实就是广义瑞利商,具体的定义可以参考这篇博客,这里我就直接给出最优 w w w的等式吧:
w = S w − 1 ( μ 0 − μ 1 ) w=S_w^{-1}(\mu_0-\mu_1) w=Sw−1(μ0−μ1)
因此,只要求出原始二类样本的均值和方差就可以确定最佳的投影方向 w w w了
- T-SNE
- T-SNE 成立的前提基于这样的一个假设:我们现实世界观察到的数据集,都在本质上有一种低维的特性(low intrinsic dimensionality),尽管它们嵌入在高维空间中,甚至可以说,高维数据经过降维后,在低维状态下,更能显现其本质特性,这其实也是流形学习(Manifold Learning)的基本思想,具体实践代码可以参考这篇博客