先看一眼PCA与KPCA的可视化区别:
![PCA and KPCA](https://files.cnblogs.com/files/dengdan890730/PCA_KPCA.bmp)
在PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?里已经推导过PCA算法的小半部分原理.
本文假设你已经知道了PCA算法的基本原理和步骤.
# 从原始输入空间到特征空间
普通PCA算法的输入:
* 训练数据集$D={x_1, dots, x_m}$, $x_i in R^n$.
* 目标降维维度: $d$
* 新的测试数据$x$
Kernel PCA则需要在输入中加入一个指定的 kernel function (kappa).
我们已经知道, 每个合法的 kernel function, 即对称和正半定的函数, 都能找到至少一个对应的feature mapping function (Phi). 现在(kappa)是已知的, (Phi)是隐藏的:存在, 但对我们来说未知. 用(Phi)把每个训练样本(x_i)映射到一个特征空间(H), 得到(z_i):
[z_i = Phi(x_i)
qquad
Z =
left[
egin{matrix}
z_1^T \
z_2^T \
vdots \
z_m^T
end{matrix}
ight]
]
均值化处理, 使每个维度的均值为0
均值向量:
[mu = frac 1m Z^T left[egin{matrix}1 \ 1 \ vdots \1end{matrix}
ight]_{m imes 1} = frac 1m Z^T eta
]
从(Z)中每一行都减去(mu^T):
[ar Z = Z - eta mu^T = Z - frac 1m eta eta^T Z
]
协方差矩阵正交对角化
这一步有点绕.
因为协方差矩阵(C = ar Z^T ar Z)中有未知函数(Phi), 所以没办法直接对角化. 在之前推导kernel svm和kernel linear regression算法的过程中, 我们都使用了kernel matrix:
[K =
left [
egin{matrix}
Phi(x_1)^T Phi(x_1), &Phi(x_1)^T Phi(x_2), &dots &Phi(x_1)^T Phi(x_n) \
vdots &dots &dots &vdots \
Phi(x_n)^T Phi(x_1), &Phi(x_n)^T Phi(x_2), &dots &Phi(x_n)^T Phi(x_n)
end{matrix}
ight ]
]
这次也不例外.
先看这个类似于(K)的均(K)矩阵:
[ar K = ar Z ar Z^T
]
假设(ar K)有一个特征值(lambda),对应的已规范化特征向量为(u):
[ ar Z ar Z^T u = lambda u
]
两边同时左乘一个(ar Z^T):
[ar Z^T ar Z ar Z^T u = ar Z^Tlambda u
]
[ o C ar Z^T u =lambda ar Z^Tu
]
这代表(ar Z^T u)是协方差矩阵(C)的特征向量, 对应的特征值也是(lambda).
所以, 我们只需要规范正交对角化(ar K), 就能对角化(C). 规范正交对角化操作的对象为:
[ar K = ar Z ar Z^T = ( Z - frac 1m eta eta^T Z)( Z^T - frac 1m Z^T eta eta^T) = ZZ^T - frac 1m eta eta^T ZZ^T - frac 1m ZZ^T eta eta^T + frac 1{m^2} eta eta^T ZZ^T eta eta^T = K - frac 1m eta eta^T K - frac 1m Keta eta^T + frac 1{m^2} eta eta^T K eta eta^T
]
特征向量规范化
由(ar K)的规范化特征向量(u), 我们可以得到(C)的特征向量(ar Z^Tu), 但它不一定是单位向量, 所以我们还要对它进行规范化处理.
[||u||^2 = u^Tar Z ar Z^Tu = u^Tlambda u = lambda
]
[p = frac {ar Z^Tu}{||ar Z^Tu||} = frac {ar Z^Tu}{sqrt lambda}
]
注意到了吧, 这里还是有(ar Z)存在, 而(ar Z = Z - frac 1m eta eta^T Z), (Z)因为包含未知的(Phi)所以也是未知的. 但是PCA的最终目的是降维, 会有一个输入向量(x), 到时又可与(Z)配合起来, 构成(kappa).
对向量(x)进行降维操作
中间没写出来的步骤, 即特征值降序排列取前(d)个对应的特征向量, 与普通的PCA是一样的.
降维操作通过(x)在一个基上的投影操作即可说明.
[p^TPhi(x) = frac {u^T ar Z Phi(x)}{sqrt lambda} = frac 1{sqrt lambda} u^T ( Z - frac 1m eta eta^T Z) Phi(x) = frac 1{sqrt lambda} u^T (k - frac 1m eta eta^T k) = frac 1{sqrt lambda} u^T (I_{m imes m} - frac 1m eta eta^T)k
]
其中, (lambda)与(u)分别是(ar K)的特征值和对应的规范化特征向量,
[k =
left [
egin{matrix}
kappa(x_1, x) \
kappa(x_2, x) \
vdots \
kappa(x_m, x) \
end{matrix}
ight]
qquad
eta = left[egin{matrix}1 \ 1 \ vdots \1end{matrix}
ight]_{m imes 1}
]