最近上课学到了KPCA,之前也有遇到过,但并没有进行详细了解,上课时老师讲的比较快,感觉糊里糊涂的,课后在网上找了一些资料进行学习,然后结合自己的理解进行了整理。
KPCA和PCA一样也是进行降维,但区别在于KPCA处理的问题是非线性的。KPCA先将数据通过映射 ϕ \phi ϕ映射到高维空间,然后再将映射后的数据进行线性变换实现降维。
这个思路写得比较简略,大家可以先看后面的总结,有一个整体的印象,然后再进行阅读。
回顾PCA,我们知道PCA求解的最终问题是 X X T W = λ W XX^{T}W=\lambda W XXTW=λW(可以结合西瓜书相关章节进行复习)。
其中X为数据矩阵,每一列代表一个样本;W为降维时的线性变换矩阵,每个列向量w就是降维后的空间中的一个基向量(可以理解为直角坐标系下的坐标轴),基的个数决定了降维后数据的维数; λ \lambda λ为对角矩阵,对角线上的元素是 X X T XX^{T} XXT的特征值。
我们在此基础上引入非线性映射 ϕ \phi ϕ,那么上面问题就可以转换为 ϕ ( X ) [ ϕ ( X ) ] T W = λ W \phi (X)[\phi (X)]^{T}W=\lambda W ϕ(X)[ϕ(X)]TW=λW。
其中W=( w 1 , w 2 , . . . , w m w_{1},w_{2},...,w_{m} w1,w2,...,wm),我们任取其中一个基向量w,可得 ϕ ( X ) [ ϕ ( X ) ] T w = λ w \phi (X)[\phi (X)]^{T}w=\lambda w ϕ(X)[ϕ(X)]Tw=λw(1)。
注意我们通常并不直接定义 ϕ \phi ϕ(这在核技巧中会有提及),也就是说我们并不知道 ϕ ( X ) [ ϕ ( X ) ] T \phi (X)[\phi (X)]^{T} ϕ(X)[ϕ(X)]T的具体内容,因此不能向PCA那样直接对其进行特征值分解。
因为 ϕ ( X ) [ ϕ ( X ) ] T = ∑ i = 1 N ϕ ( x i ) [ ϕ ( x i ) ] T \phi (X)[\phi (X)]^{T}=\sum_{i=1}^{N}\phi (x_{i})[\phi (x_{i})]^{T} ϕ(X)[ϕ(X)]T=∑i=1Nϕ(xi)[ϕ(xi)]T,那么(1)可以进一步表示为
∑ i = 1 N ϕ ( x i ) [ ϕ ( x i ) ] T w = λ w \sum_{i=1}^{N}\phi (x_{i})[\phi (x_{i})]^{T}w=\lambda w ∑i=1Nϕ(xi)[ϕ(xi)]Tw=λw
⇒ w = 1 λ ∑ i = 1 N ϕ ( x i ) [ ϕ ( x i ) ] T w = ∑ i = 1 N ϕ ( x i ) 1 λ [ ϕ ( x i ) ] T w \Rightarrow w=\frac{1}{\lambda }\sum_{i=1}^{N}\phi (x_{i})[\phi (x_{i})]^{T}w=\sum_{i=1}^{N}\phi (x_{i})\frac{1}{\lambda }[\phi (x_{i})]^{T}w ⇒w=λ1∑i=1Nϕ(xi)[ϕ(xi)]Tw=∑i=1Nϕ(xi)λ1[ϕ(xi)]Tw
此时令 α i = 1 λ [ ϕ ( x i ) ] T w \alpha_{i}=\frac{1}{\lambda }[\phi (x_{i})]^{T}w αi=λ1[ϕ(xi)]Tw
那么上式可以表示为 w = ∑ i = 1 N ϕ ( x i ) α i = Φ ( X ) α w=\sum_{i=1}^{N}\phi (x_{i})\alpha _{i}=\Phi (X)\alpha w=∑i=1Nϕ(xi)αi=Φ(X)α(2)。
其中 α = ( α 1 , α 2 , . . . ; α N ) \alpha =(\alpha _{1},\alpha _{2},...;\alpha _{N}) α=(α1,α2,...;αN)。
式(2)的意义是用映射后的数据来线性表示基向量,这点结合直角坐标系很容易理解,例如e1=(1,0),e2=(0,1)为基向量组,a1=(2,3),a2=(3,2),那么可以用a1和a2来线性表示e1和e2。式(2)也是同样的道理,因为我们不知道通过 ϕ \phi ϕ映射后的基向量组W,我们可以用映射后的样本点来线性表示,虽然我们也不知道映射后的样本点,但后续推导中映射后的样本点会更好用一些。
我们将式(2)带入式(1)中可得
ϕ ( X ) [ ϕ ( X ) ] T Φ ( X ) α = λ Φ ( X ) α \phi (X)[\phi (X)]^{T}\Phi (X)\alpha=\lambda \Phi (X)\alpha ϕ(X)[ϕ(X)]TΦ(X)α=λΦ(X)α(3)
核技巧是机器学习中很常用的一种方法,之前在SVM中也有提及到,简单来说就是为了处理非线性分类问题需要将样本通过 ϕ \phi ϕ映射到高维,但映射到高维后在高维空间计算内积,运算量较大。那么就有人想能不能不在高维空间计算内积,还能获得在高维空间中的内积结果,通常情况下我们会嘲讽一句想得美,但偏偏有时候就能成人之美,这就是核技巧。
核技巧引入了核函数K,该函数满足 K ( x i , x j ) = [ Φ ( x i ) ] T Φ ( x i ) K(x_{i},x_{j})=[\Phi (x_{i})]^{T}\Phi (x_{i}) K(xi,xj)=[Φ(xi)]TΦ(xi),这就满足了我们的需求,不需要构造映射 ϕ \phi ϕ将样本向高维空间映射,也不需要在高维空间计算内积,还能得到在高维空间的内积结果,这样的核函数的确存在,大家可以自行查找。
我们将 K = [ Φ ( X ) ] T Φ ( X ) K=[\Phi (X)]^{T}\Phi (X) K=[Φ(X)]TΦ(X)称为核矩阵,需要注意的是核函数对应的核矩阵是对称且半正定的。
重新回到推导,我们在式(3)的左侧乘以一个 [ Φ ( X ) ] T [\Phi (X)]^{T} [Φ(X)]T可得:
[ Φ ( X ) ] T ϕ ( X ) [ ϕ ( X ) ] T Φ ( X ) α = λ [ Φ ( X ) ] T Φ ( X ) α [\Phi (X)]^{T}\phi (X)[\phi (X)]^{T}\Phi (X)\alpha=\lambda [\Phi (X)]^{T}\Phi (X)\alpha [Φ(X)]Tϕ(X)[ϕ(X)]TΦ(X)α=λ[Φ(X)]TΦ(X)α
⇒ K 2 α = λ K α \Rightarrow K^{2}\alpha =\lambda K\alpha ⇒K2α=λKα
⇒ K α = λ α \Rightarrow K\alpha =\lambda \alpha ⇒Kα=λα(很多博客中都是这样推导的,但感觉这一步有点问题,因为K是半正定的,不能直接进行消去,我一直不太理解,如果谁知道的话还请告诉我一下)
此时可以对K进行分解,注意得到的特征向量 α \alpha α并不是高维空间中的基向量(注意PCA最后进行特征值分解得到的就是基向量,但要注意PCA进行分解的矩阵是 X X T XX^{T} XXT,对应到KPCA就是 ϕ ( X ) [ ϕ ( X ) ] T \phi (X)[\phi (X)]^{T} ϕ(X)[ϕ(X)]T,而上面分解的矩阵是 [ ϕ ( X ) ] T ϕ ( X ) [\phi (X)]^{T}\phi (X) [ϕ(X)]Tϕ(X))。那么特征向量 α \alpha α是什么呢,之前也提到了, α \alpha α就是用高维空间的映射样本对基向量进行线性表示时所用的线性系数。我们取其中特征值较大的d’个特征向量组成矩阵 A = ( α 1 , α 2 , . . . , α d ′ ) A=(\alpha _{1},\alpha _{2},...,\alpha _{d^{'}}) A=(α1,α2,...,αd′),此时可以构造d’个基向量,那么样本最终降维后的维度就是d’;另外注意分解时的 λ \lambda λ还是基向量 w w w对应的 λ \lambda λ,这是没有变动的。
现在我们来构造基向量,从式(2) w = Φ ( X ) α w=\Phi (X)\alpha w=Φ(X)α( α \alpha α是A中的一个列向量)可以看出获取基向量w,需要高维空间的样本映射 Φ ( X ) \Phi (X) Φ(X)和对应的线性组合系数 α \alpha α。
此时w需进行归一化,即 w T w = 1 w^{T}w=1 wTw=1,我们进行推导:
w T w w^{T}w wTw
= [ Φ ( X ) α ] T Φ ( X ) α =[\Phi (X)\alpha]^{T}\Phi (X)\alpha =[Φ(X)α]TΦ(X)α
= α T [ Φ ( X ) ] T Φ ( X ) α =\alpha ^{T}[\Phi (X)]^{T}\Phi (X)\alpha =αT[Φ(X)]TΦ(X)α
= α T K α =\alpha ^{T}K\alpha =αTKα
= λ α T α =\lambda \alpha ^{T}\alpha =λαTα
我们令 α = 1 λ α \alpha=\frac{1}{\sqrt{\lambda }}\alpha α=λ1α,此时就得到了归一化的w。
上面的过程得到了 α \alpha α,但还是那个问题,我们并没有显式定义 ϕ \phi ϕ,因此还是无法获取基向量,那么我们能不能不获取基向量,直接得到在基向量上的坐标,答案是可以的,方法还是核技巧。例如我们想要获取 Φ ( x i ) \Phi (x_{i}) Φ(xi)在 w w w上的坐标 c i c_{i} ci,那么就可以做内积:
c i j = [ Φ ( x i ) ] T w c_{ij}=[\Phi (x_{i})]^Tw cij=[Φ(xi)]Tw
= [ Φ ( x i ) ] T Φ ( X ) α =[\Phi (x_{i})]^T\Phi (X)\alpha =[Φ(xi)]TΦ(X)α
= ∑ j = 1 N [ Φ ( x i ) ] T Φ ( x j ) α j =\sum_{j=1}^{N}[\Phi (x_{i})]^{T}\Phi (x_{j})\alpha _{j} =∑j=1N[Φ(xi)]TΦ(xj)αj
= ∑ j = 1 N K i j α j =\sum_{j=1}^{N}K_{ij}\alpha _{j} =∑j=1NKijαj
改写成矩阵形式就是 C T = K A C^{T}=KA CT=KA,其中 C = ( c 1 , c 2 , . . . , c N ) C=(c _{1},c _{2},...,c _{N}) C=(c1,c2,...,cN), c i c _{i} ci为 x i x _{i} xi的降维结果。
注意在PCA中, X X T W = λ W XX^{T}W=\lambda W XXTW=λW的样本X是中心化过的,而 ϕ ( X ) [ ϕ ( X ) ] T W = λ W \phi (X)[\phi (X)]^{T}W=\lambda W ϕ(X)[ϕ(X)]TW=λW中一直没提中心化的问题,我上面的讨论均是建立在 ϕ ( X ) \phi (X) ϕ(X)已经进行中心化的基础上,中心化的问题可以参照https://zhuanlan.zhihu.com/p/59775730我上面的一些思路也是参照这篇文章。
PCA是对 X X T XX^{T} XXT进行特征值分解,选取几个较大特征值对应的特征向量组成矩阵W(W的列向量即为降维后的空间的基向量),而KPCA与PCA一个明显的区别就是不能直接进行特征值分解来获取基向量。
在KPCA中是通过高维空间映射样本来线性表示基向量(注意基向量的维数是与高维空间的维数一致,基向量的个数才决定数据降维后的维数,PCA也是如此,基向量的维数与输入样本的维数一样,基向量的个数决定数据降维后的维数),然后先得到高维空间映射样本表示基向量时的线性系数,再组合得到基向量。
又因为KPCA中没有显示定义向高维空间的映射,因此不能获得高维空间的映射样本,也无法显式获得基向量,但通过核技巧可以直接获得样本在各基向量上的坐标,从而实现降维,也就是说KPCA最终也没有得到基向量,但通过对基向量进行其他形式的表示可以直接得到样本在基向量上的投影(即坐标)。