Note 7 - 核主成分分析(Kernel Principal Component Analysis)
核主成分分析
Note 7 - 核主成分分析(Kernel Principal Component Analysis)7.1 用内积表示的线性PCA(Linear PCA expressed with inner products)7.2 向核PCA过渡 (Transition to Kernel PCA)Definition 7.1 正定核 (Positive Definite Kernel)标准PCA通过将观察到的数据投射到一个线性子空间来降低其维度。选择投影的方式是使以平方的标准欧氏准则衡量的误差最小,这也可以解释为减少白高斯噪声的一种方式。一个非常重要的应用是将PCA作为分类的预处理,因为分类器在减少噪声的特征空间中表现更好。
标准PCA的主要缺点是,它严重依赖数据的近似线性结构。在许多应用中,这是一个过于严格的假设。核PCA(K-PCA)是标准PCA的一个扩展,它没有这些缺点。K-PCA的关键思想是,它隐含地假设存在一个非线性映射
ϕ:Rp→H,(7.1)\phi: \mathbb{R}^{p} \rightarrow \mathcal{H}, \tag{7.1} ϕ:Rp→H,(7.1)
其中H\mathcal{H}H是一个非常高维的向量空间(甚至可能是无限维的),其内积为1⟨⋅,⋅⟩{ }^{1}\langle\cdot, \cdot\rangle1⟨⋅,⋅⟩。我们无妨把H\mathcal{H}H看作是一些RP\mathbb{R}^{P}RP,有非常大的PPP。作为一个初步的步骤,我们重新表述众所周知的标准PCA,使其只涉及我们数据的内积。
1{ }^{1}1 形式上,希尔伯特空间H\mathcal{H}H是一个实数或复数内积空间,就内积所引导的距离函数而言,它也是一个完整的公制空间。
7.1 用内积表示的线性PCA(Linear PCA expressed with inner products)
让X∈Rp×n\mathbf{X} \in \mathbb{R}^{p \times n}X∈Rp×n为居中的数据矩阵(这将是下面推导的一个关键假设),让K:=X⊤X\mathbf{K}:=\mathbf{X}^{\top} \mathbf{X}K:=X⊤X为(n×n)(n \times n)(n×n)矩阵,由数据的所有内积组成。更确切地说,(i,j)(i, j)(i,j)项是K\mathbf{K}K第iii和第jjj观测值的内积xi⊤xj\mathbf{x}_{i}^{\top} \mathbf{x}_{j}xi⊤xj。
回顾一下,如果X=UΣV⊤\mathbf{X}=\mathbf{U} \boldsymbol{\Sigma} \mathbf{V}^{\top}X=UΣV⊤是数据矩阵的SVD。那么数据向量y∈Rp\mathbf{y} \in \mathbb{R}^{p}y∈Rp的前kkk主分量是由Uk⊤\mathbf{U}_{k}^{\top}Uk⊤给出的。在目前的情况下,只给出了内积,因此不可能直接得到Uk\mathbf{U}_{k}Uk。然而,K\mathbf{K}K的特征值分解允许对这个问题有一个优雅的解决方案。记住,我们有 K:=X⊤X\mathbf{K}:=\mathbf{X}^{\top} \mathbf{X}K:=X⊤X 并用它的SVD代替X\mathbf{X}X。我们得到
K=VΣ⊤ΣV⊤.(7.2)\mathbf{K}=\mathbf{V} \boldsymbol{\Sigma}^{\top} \boldsymbol{\Sigma} \mathbf{V}^{\top} \text {. }\tag{7.2} K=VΣ⊤ΣV⊤.(7.2)
记住,V\mathbf{V}V是正交的,Σ⊤Σ\boldsymbol{\Sigma}^{\top} \boldsymbol{\Sigma}Σ⊤Σ是对角的。因此,方程(7.2)是K\mathbf{K}K的特征值分解(EVD),由于EVD的唯一性,通过计算K\mathbf{K}K的kkk最大特征值与它们各自的特征向量,我们得到σ12,⋯,σk2\sigma_{1}^{2}, \cdots, \sigma_{k}^{2}σ12,⋯,σk2和Vk\mathbf{V}_{k}Vk。我们将假设σk>0\sigma_{k}>0σk>0,否则我们可以减少目标子空间的维度而不损失任何数据信息。为了简单起见,我们定义对角矩阵Σk=diag(σ1,…,σk)\Sigma_{k}=\operatorname{diag}\left(\sigma_{1}, \ldots, \sigma_{k}\right)Σk=diag(σ1,…,σk)。
这使我们能够对于一个给定的观测值 y\mathbf{y}y只需使用内积就可以计算出 Uk⊤y\mathbf{U}_{k}^{\top} \mathbf{y}Uk⊤y的主成分。对于一个新的测量值y\mathbf{y}y,我们有
Vk⊤X⊤y=Vk⊤VΣU⊤y=[Ik∣0]ΣU⊤y=[Σk∣0]U⊤y=ΣkUk⊤y.(7.3)\begin{aligned} \mathbf{V}_{k}^{\top} \mathbf{X}^{\top} \mathbf{y} &=\mathbf{V}_{k}^{\top} \mathbf{V} \boldsymbol{\Sigma} \mathbf{U}^{\top} \mathbf{y} \\ &=\left[I_{k} \mid 0\right] \boldsymbol{\Sigma} \mathbf{U}^{\top} \mathbf{y} \\ &=\left[\boldsymbol{\Sigma}_{k} \mid 0\right] \mathbf{U}^{\top} \mathbf{y} \\ &=\boldsymbol{\Sigma}_{k} \mathbf{U}_{k}^{\top} \mathbf{y} . \end{aligned} \tag{7.3}Vk⊤X⊤y=Vk⊤VΣU⊤y=[Ik∣0]ΣU⊤y=[Σk∣0]U⊤y=ΣkUk⊤y.(7.3)
将此方程与Σk−1\Sigma_{k}^{-1}Σk−1相乘,我们可以得到
Uk⊤y=Σk−1Vk⊤X⊤y=Σk−1Vk⊤[x1⊤y⋮xn⊤y].(7.4)\mathbf{U}_{k}^{\top} \mathbf{y}=\boldsymbol{\Sigma}_{k}^{-1} \mathbf{V}_{k}^{\top} \mathbf{X}^{\top} \mathbf{y}=\boldsymbol{\Sigma}_{k}^{-1} \mathbf{V}_{k}^{\top}\left[\begin{array}{c} \mathbf{x}_{1}^{\top} \mathbf{y} \\ \vdots \\ \mathbf{x}_{n}^{\top} \mathbf{y} \end{array}\right] . \tag{7.4}Uk⊤y=Σk−1Vk⊤X⊤y=Σk−1Vk⊤⎣⎢⎡x1⊤y⋮xn⊤y⎦⎥⎤.(7.4)
注意,这个方程的右边可以通过只涉及数据的内积的数据来计算,即Gram-matrix K\mathbf{K}K和内积xn⊤y\mathbf{x}_{n}^{\top} \mathbf{y}xn⊤y。
使数据居中
到目前为止,我们已经假定数据是居中的,也就是说,Gram-matrix K\mathbf{K}K来自居中化的数据。这个假设很关键,因为否则方程(7.4)的推导将不成立。现在让我们假设,我们没有可用的居中数据,而Gram-matrix K\mathbf{K}K是由非居中数据建立的。好消息是,可以通过以下公式直接从K\mathbf{K}K推导出对应于中心数据的格拉姆矩阵,例如K~\tilde{\mathbf{K}}K~,即
K~=HKH,(7.5)\tilde{\mathbf{K}}=\mathbf{H K H}, \tag{7.5}K~=HKH,(7.5)
其中H=(In−1n1n1n⊤)\mathbf{H}=\left(\mathbf{I}_{n}-\frac{1}{n} \mathbb{1}_{n} \mathbb{1}_{n}^{\top}\right)H=(In−n11n1n⊤).
证明:
从方程(1.3)中可以看出,如果X\mathbf{X}X表示非居中的数据矩阵,那么居中的矩阵由以下公式给出
X‾=X−μ^1n⊤,(7.6)\overline{\mathbf{X}}=\mathbf{X}-\hat{\mu} \mathbb{1}_{n}^{\top}, \tag{7.6}X=X−μ^1n⊤,(7.6)
有μ^=1nX1n\hat{\mu}=\frac{1}{n} \mathbf{X} \mathbb{1}_{n}μ^=n1X1n。 由此,可以看出
X‾=X−1nX1n1n⊤=X(In−1n1n1n⊤).(7.7)\overline{\mathbf{X}}=\mathbf{X}-\frac{1}{n} \mathbf{X} \mathbb{1}_{n} \mathbb{1}_{n}^{\top}=\mathbf{X}\left(\mathbf{I}_{n}-\frac{1}{n} \mathbb{1}_{n} \mathbb{1}_{n}^{\top}\right) . \tag{7.7}X=X−n1X1n1n⊤=X(In−n11n1n⊤).(7.7)
用对称矩阵的速记符号来表示 H:=In−1n1n1n⊤\mathbf{H}:=\mathbf{I}_{n}-\frac{1}{n} \mathbb{1}_{n} \mathbb{1}_{n}^{\top}H:=In−n11n1n⊤。我们可以得到
K~=X‾⊤X‾=HX⊤XH=HKH.(7.8)\tilde{\mathbf{K}}=\overline{\mathbf{X}}^{\top} \overline{\mathbf{X}}=\mathbf{H X}^{\top} \mathbf{X} \mathbf{H}=\mathbf{H K H} . \tag{7.8}K~=X⊤X=HX⊤XH=HKH.(7.8)
因此,如果我们有来自非中心数据的Gram-matrix,我们可以很容易地计算出对应于中心数据的Gram-matrix(无需明确地将X\mathbf{X}X居中)。由此,我们可以–如上所述–计算Vk\mathbf{V}_{k}Vk和Σk\boldsymbol{\Sigma}_{k}Σk。为了计算新数据样本y\mathbf{y}y的主成分,我们首先要根据训练样本把y\mathbf{y}y居中处理。具体来说,这意味着我们必须从y\mathbf{y}y减去训练数据的经验平均值μ^=1n∑ixi=1nX1n\hat{\mu}=\frac{1}{n} \sum_{i} \mathbf{x}_{i}=\frac{1}{n} \mathbf{X} \mathbb{1}_{n}μ^=n1∑ixi=n1X1n。然后我们必须用X‾=XH\overline{\mathbf{X}}=\mathbf{X H}X=XH替换公式(7.3)和(7.4)中的X\mathbf{X}X。这就得到了
Uk⊤(y−1nX1n)=Σk−1Vk⊤(XH)⊤(y−1nX1n)=Σk−1Vk⊤ky(7.9)\mathbf{U}_{k}^{\top}\left(\mathbf{y}-\frac{1}{n} \mathbf{X} \mathbb{1}_{n}\right)=\boldsymbol{\Sigma}_{k}^{-1} \mathbf{V}_{k}^{\top}(\mathbf{X} \mathbf{H})^{\top}\left(\mathbf{y}-\frac{1}{n} \mathbf{X} \mathbb{1}_{n}\right)=\boldsymbol{\Sigma}_{k}^{-1} \mathbf{V}_{k}^{\top} \mathbf{k}_{y} \tag{7.9}Uk⊤(y−n1X1n)=Σk−1Vk⊤(XH)⊤(y−n1X1n)=Σk−1Vk⊤ky(7.9)
其中
ky=H[x1⊤y⋮xn⊤y]−1nHK1n\mathbf{k}_{y}=\mathbf{H}\left[\begin{array}{c} \mathbf{x}_{1}^{\top} \mathbf{y} \\ \vdots \\ \mathbf{x}_{n}^{\top} \mathbf{y} \end{array}\right]-\frac{1}{n} \mathbf{H K} \mathbb{1}_{n} ky=H⎣⎢⎡x1⊤y⋮xn⊤y⎦⎥⎤−n1HK1n
7.2 向核PCA过渡 (Transition to Kernel PCA)
现在,通过简单地将内积 x⊤y\mathbf{x}^{\top} \mathbf{y}x⊤y替换为⟨ϕ(x),ϕ(y)⟩\langle\phi(\mathbf{x}), \phi(\mathbf{y})\rangle⟨ϕ(x),ϕ(y)⟩来扩展经典的PCA是很简单的。K-PCA的实际成功是由于计算⟨ϕ(x),ϕ(y)⟩\langle\phi(\mathbf{x}), \phi(\mathbf{y})\rangle⟨ϕ(x),ϕ(y)⟩时,既不需要ϕ\phiϕ也不需要⟨⋅,⋅⟩\langle\cdot, \cdot\rangle⟨⋅,⋅⟩ 的内积。相反,只需要有一个函数
κ:Rp×Rp→R,(x,y)↦κ(x,y)(7.10)\kappa: \mathbb{R}^{p} \times \mathbb{R}^{p} \rightarrow \mathbb{R}, \quad(\mathbf{x}, \mathbf{y}) \mapsto \kappa(\mathbf{x}, \mathbf{y}) \tag{7.10} κ:Rp×Rp→R,(x,y)↦κ(x,y)(7.10)
这反映了⟨ϕ(x),ϕ(y)⟩\langle\phi(\mathbf{x}), \phi(\mathbf{y})\rangle⟨ϕ(x),ϕ(y)⟩的属性,即对于所有x∈Rp\mathbf{x} \in \mathbb{R}^{p}x∈Rp来说是对称的,并且满足κ(x,x)≥0\kappa(\mathbf{x}, \mathbf{x}) \geq 0κ(x,x)≥0 的正定属性。用κ(x,y)\kappa(\mathbf{x}, \mathbf{y})κ(x,y)代替⟨ϕ(x),ϕ(y)⟩\langle\phi(\mathbf{x}), \phi(\mathbf{y})\rangle⟨ϕ(x),ϕ(y)⟩,因此不需要知道特征映射ϕ\phiϕ,称为核技巧(Kernel trick)。
Definition 7.1 正定核 (Positive Definite Kernel)
令S:={x1,…,xn}⊂RpS:=\left\{\mathbf{x}_{1}, \ldots, \mathbf{x}_{n}\right\} \subset \mathbb{R}^{p}S:={x1,…,xn}⊂Rp 与κ(⋅)\kappa(\cdot)κ(⋅)如上定义. 带有(i,j)(i, j)(i,j) 项kij=κ(xi,xj)k_{i j}=\kappa\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)kij=κ(xi,xj)的 (n×n)(n \times n)(n×n)-矩阵K\mathbf{K}K 被称为SSS的Gram-或Kernel-矩阵,相对于κ\kappaκ。
如果对于所有有限的、非空的集合 S⊂RpS \subset \mathbb{R}^{p}S⊂Rp来说,相应的Gram-matrix是正半定的(正定的),那么这个函数κ(⋅)\kappa(\cdot)κ(⋅)被称为核(正定的核)。
在上一小节中,我们讨论了在潜在的希尔伯特空间中的数据居中问题。我们在这里也面临同样的问题。当一个新的数据点出现时,直接计算新数据点的非中心化内积向量与训练数据的关系是很简单的。我们将把它称为
knew=[⟨ϕ(x1),ϕ(y)⟩⋮⟨ϕ(xn),ϕ(y)⟩].\mathbf{k}^{\text {new }}=\left[\begin{array}{c} \left\langle\phi\left(\mathbf{x}_{1}\right), \phi(\mathbf{y})\right\rangle \\ \vdots \\ \left\langle\phi\left(\mathbf{x}_{n}\right), \phi(\mathbf{y})\right\rangle \end{array}\right] . knew=⎣⎢⎡⟨ϕ(x1),ϕ(y)⟩⋮⟨ϕ(xn),ϕ(y)⟩⎦⎥⎤.
那么,中心化数据的第jjj条是
(kcentnew)j=⟨ϕ(xj)−1n∑iϕ(xi),ϕ(y)−1n∑iϕ(xi)⟩\left(\mathbf{k}_{c e n t}^{n e w}\right)_{j}=\left\langle\phi\left(\mathbf{x}_{j}\right)-\frac{1}{n} \sum_{i} \phi\left(\mathbf{x}_{i}\right), \phi(\mathbf{y})-\frac{1}{n} \sum_{i} \phi\left(\mathbf{x}_{i}\right)\right\rangle (kcentnew)j=⟨ϕ(xj)−n1i∑ϕ(xi),ϕ(y)−n1i∑ϕ(xi)⟩
为了找到一个更简洁的表达方式,我们利用标量乘积的线性来得到
⟨ϕ(xj)−1n∑iϕ(xi),ϕ(y)−1n∑iϕ(xi)⟩=⟨ϕ(xj),ϕ(y)⟩−1n⟨∑iϕ(xi),ϕ(y)⟩−1n⟨ϕ(xj),∑iϕ(xi)⟩+1n2⟨∑iϕ(xi),∑iϕ(xi)⟩,\begin{gathered} \left\langle\phi\left(\mathbf{x}_{j}\right)-\frac{1}{n} \sum_{i} \phi\left(\mathbf{x}_{i}\right), \phi(\mathbf{y})-\frac{1}{n} \sum_{i} \phi\left(\mathbf{x}_{i}\right)\right\rangle \\ =\left\langle\phi\left(\mathbf{x}_{j}\right), \phi(\mathbf{y})\right\rangle-\frac{1}{n}\left\langle\sum_{i} \phi\left(\mathbf{x}_{i}\right), \phi(\mathbf{y})\right\rangle \\ -\frac{1}{n}\left\langle\phi\left(\mathbf{x}_{j}\right), \sum_{i} \phi\left(\mathbf{x}_{i}\right)\right\rangle+\frac{1}{n^{2}}\left\langle\sum_{i} \phi\left(\mathbf{x}_{i}\right), \sum_{i} \phi\left(\mathbf{x}_{i}\right)\right\rangle, \end{gathered} ⟨ϕ(xj)−n1i∑ϕ(xi),ϕ(y)−n1i∑ϕ(xi)⟩=⟨ϕ(xj),ϕ(y)⟩−n1⟨i∑ϕ(xi),ϕ(y)⟩−n1⟨ϕ(xj),i∑ϕ(xi)⟩+n21⟨i∑ϕ(xi),i∑ϕ(xi)⟩,
而且很容易看出,
kcentnew=knew−1n1n1n⊤knew−1nK1n+1n21n1n⊤K1n=Hknew−1nHK1n.\begin{gathered} \mathbf{k}_{\text {cent }}^{\text {new }}=\mathbf{k}^{\text {new }}-\frac{1}{n} \mathbb{1}_{n} \mathbb{1}_{n}^{\top} \mathbf{k}^{\text {new }}-\frac{1}{n} \mathbf{K} \mathbb{1}_{n}+\frac{1}{n^{2}} \mathbb{1}_{n} \mathbb{1}_{n}^{\top} \mathbf{K} \mathbb{1}_{n} \\ =\mathbf{H k}^{\text {new }}-\frac{1}{n} \mathbf{H} \mathbf{K} \mathbb{1}_{n} . \end{gathered} kcentnew=knew−n11n1n⊤knew−n1K1n+n211n1n⊤K1n=Hknew−n1HK1n.
总之,对于一个训练集X=[x1,…xn],xi∈Rp\mathbf{X}=\left[\mathbf{x}_{1}, \ldots \mathbf{x}_{n}\right], \mathbf{x}_{i} \in \mathbb{R}^{p}X=[x1,…xn],xi∈Rp 的K-PCA包括以下步骤。
找到一个合适的内核函数 κ(⋅)\kappa(\cdot)κ(⋅) 并计算Gram-matrix
K=[κ(x1,x1)κ(x1,x2)…κ(x1,xn)κ(x2,x1)κ(x2,x2)κ(x2,xn)⋮⋮⋱⋮κ(xn,x1)κ(xn,x2)…κ(xn,xn)]\mathbf{K}=\left[\begin{array}{cccc} \kappa\left(\mathbf{x}_{1}, \mathbf{x}_{1}\right) & \kappa\left(\mathbf{x}_{1}, \mathbf{x}_{2}\right) & \ldots & \kappa\left(\mathbf{x}_{1}, \mathbf{x}_{n}\right) \\ \kappa\left(\mathbf{x}_{2}, \mathbf{x}_{1}\right) & \kappa\left(\mathbf{x}_{2}, \mathbf{x}_{2}\right) & & \kappa\left(\mathbf{x}_{2}, \mathbf{x}_{n}\right) \\ \vdots & \vdots & \ddots & \vdots \\ \kappa\left(\mathbf{x}_{n}, \mathbf{x}_{1}\right) & \kappa\left(\mathbf{x}_{n}, \mathbf{x}_{2}\right) & \ldots & \kappa\left(\mathbf{x}_{n}, \mathbf{x}_{n}\right) \end{array}\right] K=⎣⎢⎢⎢⎡κ(x1,x1)κ(x2,x1)⋮κ(xn,x1)κ(x1,x2)κ(x2,x2)⋮κ(xn,x2)…⋱…κ(x1,xn)κ(x2,xn)⋮κ(xn,xn)⎦⎥⎥⎥⎤
计算Gram-matrix K~=HKH\tilde{\mathbf{K}}=\mathbf{H K H}K~=HKH,其中H=In−1n1n1n⊤\mathbf{H}=\mathbf{I}_{n}-\frac{1}{n} \mathbb{1}_{n} \mathbb{1}_{n}^{\top}H=In−n11n1n⊤是居中化的数据。
计算特征值分解K~=VΛV⊤\tilde{\mathbf{K}}=\mathbf{V} \boldsymbol{\Lambda} \mathbf{V}^{\top}K~=VΛV⊤。由于核函数的定义,矩阵K\mathbf{K}K是半正定的,因此Λ\boldsymbol{\Lambda}Λ的对角线项是非负的。因此,我们可以写成 Λ=Σ2=diag(σ12,…,σn2)\boldsymbol{\Lambda}=\boldsymbol{\Sigma}^{2}=\operatorname{diag}\left(\sigma_{1}^{2}, \ldots, \sigma_{n}^{2}\right)Λ=Σ2=diag(σ12,…,σn2).
定义缩减矩阵 Σk=diag(σ1,…,σk)∈Rk×k\boldsymbol{\Sigma}_{k}=\operatorname{diag}\left(\sigma_{1}, \ldots, \sigma_{k}\right) \in \mathbb{R}^{k \times k}Σk=diag(σ1,…,σk)∈Rk×k 与Vk∈Rn×k\mathbf{V}_{k} \in \mathbb{R}^{n \times k}Vk∈Rn×k.
缩减后的训练数据由以下公式得出
S=ΣkVk⊤(7.11)\mathbf{S}=\boldsymbol{\Sigma}_{k} \mathbf{V}_{k}^{\top} \tag{7.11} S=ΣkVk⊤(7.11)
对于一个新的数据点y∈Rp\mathbf{y} \in \mathbb{R}^{p}y∈Rp ,kkk核主成分的计算方法是
snew:=Σk−1Vk⊤kcentnew(7.12)\mathbf{s}_{\text {new }}:=\mathbf{\Sigma}_{k}^{-1} \mathbf{V}_{k}^{\top} \mathbf{k}_{\text {cent }}^{\text {new }} \tag{7.12} snew:=Σk−1Vk⊤kcentnew(7.12)
其中
kcentnew=H(knew−1nK1n)whereknew=[κ(x1,y),…,κ(xn,y)]⊤.\begin{aligned} \mathbf{k}_{\text {cent }}^{\text {new }} &=\mathbf{H}\left(\mathbf{k}^{\text {new }}-\frac{1}{n} \mathbf{K} \mathbb{1}_{n}\right) \\ \text { where } \mathbf{k}^{\text {new }} &=\left[\kappa\left(\mathbf{x}_{1}, \mathbf{y}\right), \ldots, \kappa\left(\mathbf{x}_{n}, \mathbf{y}\right)\right]^{\top} . \end{aligned} kcentnewwhereknew=H(knew−n1K1n)=[κ(x1,y),…,κ(xn,y)]⊤.