先看一眼PCA与KPCA的可视化区别:

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[
\begin{matrix}
z_1^T \\
z_2^T \\
\vdots \\
z_m^T
\end{matrix}
\right]
\]

均值化处理, 使每个维度的均值为0

均值向量:
\[
\mu = \frac 1m Z^T \left[\begin{matrix}1 \\ 1 \\ \vdots \\1\end{matrix}\right]_{m\times 1} = \frac 1m Z^T \beta
\]
从\(Z\)中每一行都减去\(\mu^T\):
\[
\bar Z = Z - \beta \mu^T = Z - \frac 1m \beta \beta^T Z
\]

协方差矩阵正交对角化

这一步有点绕.
因为协方差矩阵\(C = \bar Z^T \bar Z\)中有未知函数\(\Phi\), 所以没办法直接对角化. 在之前推导kernel svm和kernel linear regression算法的过程中, 我们都使用了kernel matrix:
\[
K =
\left [
\begin{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}
\right ]
\]
这次也不例外.
先看这个类似于\(K\)的均\(K\)矩阵:
\[
\bar K = \bar Z \bar Z^T
\]
假设\(\bar K\)有一个特征值\(\lambda\),对应的已规范化特征向量为\(u\):
\[
\bar Z \bar Z^T u = \lambda u
\]
两边同时左乘一个\(\bar Z^T\):
\[
\bar Z^T \bar Z \bar Z^T u = \bar Z^T\lambda u
\]
\[
\to C \bar Z^T u =\lambda \bar Z^Tu
\]
这代表\(\bar Z^T u\)是协方差矩阵\(C\)的特征向量, 对应的特征值也是\(\lambda\).
所以, 我们只需要规范正交对角化\(\bar K\), 就能对角化\(C\). 规范正交对角化操作的对象为:
\[
\bar K = \bar Z \bar Z^T = ( Z - \frac 1m \beta \beta^T Z)( Z^T - \frac 1m Z^T \beta \beta^T) = ZZ^T - \frac 1m \beta \beta^T ZZ^T - \frac 1m ZZ^T \beta \beta^T + \frac 1{m^2} \beta \beta^T ZZ^T \beta \beta^T = K - \frac 1m \beta \beta^T K - \frac 1m K\beta \beta^T + \frac 1{m^2} \beta \beta^T K \beta \beta^T
\]

特征向量规范化

由\(\bar K\)的规范化特征向量\(u\), 我们可以得到\(C\)的特征向量\(\bar Z^Tu\), 但它不一定是单位向量, 所以我们还要对它进行规范化处理.
\[
||u||^2 = u^T\bar Z \bar Z^Tu = u^T\lambda u = \lambda
\]
\[
p = \frac {\bar Z^Tu}{||\bar Z^Tu||} = \frac {\bar Z^Tu}{\sqrt \lambda}
\]
注意到了吧, 这里还是有\(\bar Z\)存在, 而\(\bar Z = Z - \frac 1m \beta \beta^T Z\), \(Z\)因为包含未知的\(\Phi\)所以也是未知的. 但是PCA的最终目的是降维, 会有一个输入向量\(x\), 到时又可与\(Z\)配合起来, 构成\(\kappa\).

对向量\(x\)进行降维操作

中间没写出来的步骤, 即特征值降序排列取前\(d\)个对应的特征向量, 与普通的PCA是一样的.
降维操作通过\(x\)在一个基上的投影操作即可说明.
\[
p^T\Phi(x) = \frac {u^T \bar Z \Phi(x)}{\sqrt \lambda} = \frac 1{\sqrt \lambda} u^T ( Z - \frac 1m \beta \beta^T Z) \Phi(x) = \frac 1{\sqrt \lambda} u^T (k - \frac 1m \beta \beta^T k) = \frac 1{\sqrt \lambda} u^T (I_{m \times m} - \frac 1m \beta \beta^T)k
\]
其中, \(\lambda\)与\(u\)分别是\(\bar K\)的特征值和对应的规范化特征向量,
\[
k =
\left [
\begin{matrix}
\kappa(x_1, x) \\
\kappa(x_2, x) \\
\vdots \\
\kappa(x_m, x) \\
\end{matrix}
\right]
\qquad
\beta = \left[\begin{matrix}1 \\ 1 \\ \vdots \\1\end{matrix}\right]_{m\times 1}
\]

Kernel Methods (5) Kernel PCA的更多相关文章

  1. Kernel Methods (4) Kernel SVM

    (本文假设你已经知道了hard margin SVM的基本知识.) 如果要为Kernel methods找一个最好搭档, 那肯定是SVM. SVM从90年代开始流行, 直至2012年被deep lea ...

  2. Kernel Methods (2) Kernel function

    几个重要的问题 现在已经知道了kernel function的定义, 以及使用kernel后可以将非线性问题转换成一个线性问题. 在使用kernel 方法时, 如果稍微思考一下的话, 就会遇到以下几个 ...

  3. Kernel Methods (3) Kernel Linear Regression

    Linear Regression 线性回归应该算得上是最简单的一种机器学习算法了吧. 它的问题定义为: 给定训练数据集\(D\), 由\(m\)个二元组\(x_i, y_i\)组成, 其中: \(x ...

  4. Kernel Methods - An conclusion

    Kernel Methods理论的几个要点: 隐藏的特征映射函数\(\Phi\) 核函数\(\kappa\): 条件: 对称, 正半定; 合法的每个kernel function都能找到对应的\(\P ...

  5. 核方法(Kernel Methods)

    核方法(Kernel Methods) 支持向量机(SVM)是机器学习中一个常见的算法,通过最大间隔的思想去求解一个优化问题,得到一个分类超平面.对于非线性问题,则是通过引入核函数,对特征进行映射(通 ...

  6. PRML读书会第六章 Kernel Methods(核函数,线性回归的Dual Representations,高斯过程 ,Gaussian Processes)

    主讲人 网络上的尼采 (新浪微博:@Nietzsche_复杂网络机器学习) 网络上的尼采(813394698) 9:16:05 今天的主要内容:Kernel的基本知识,高斯过程.边思考边打字,有点慢, ...

  7. Kernel methods on spike train space for neuroscience: a tutorial

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 时序点过程:http://www.tensorinfinity.com/paper_154.html Abstract 在过去的十年中,人 ...

  8. Kernel Methods for Deep Learning

    目录 引 主要内容 与深度学习的联系 实验 Cho Y, Saul L K. Kernel Methods for Deep Learning[C]. neural information proce ...

  9. Kernel Methods (1) 从简单的例子开始

    一个简单的分类问题, 如图左半部分所示. 很明显, 我们需要一个决策边界为椭圆形的非线性分类器. 我们可以利用原来的特征构造新的特征: \((x_1, x_2) \to (x_1^2, \sqrt 2 ...

随机推荐

  1. js中的冒泡排序以及实现一个数组中得最到最大的数字小例

    这其实是一个很简单的js就可以实现,当然一般情况就是利用for循环,从第一个跟第二个开始比较,根据大小交互位置,思路很简单. 也就是js中的冒泡排序 冒泡排序 时间复杂度为O(n^2),有两个优点: ...

  2. Ajax与jQuery、json

    一.Ajax简介 Ajax(Asynchronous JavaScript and Xml)--异步刷新技术 Ajax的关键元素包括以下内容: ① JavaScript语言:Ajax技术的主要开发语言 ...

  3. HTML:图片热点 网页划区 表单

    图片热点: 划出图片中的区域,做超链接,点击该区域就可以直接跳转到链接网站 <img src="../../../3.jpg" title="血精灵" u ...

  4. Java面向对象之多态

    多态:具有表现多种形态的能力的特征(同一个实现接口,使用不同的实例而执行不同的操作) 实现多态的优点:为了方便统一调用! 实现多态的三种方式! 1:子类到父类的转换: 例: Dog dog=new D ...

  5. 使用javascript对密码进行有密码强度提示的验证

    好些网站的注册功能中,都有对密码进行验证并且还有强度提示.下面就来实现这种效果.密码强度说明:密码强度:弱——纯数字,纯字母,纯符号密码强度:中——数字,字母,符号任意两种的组合密码强度:强——数字, ...

  6. lua upvalue

    转自http://blog.chinaunix.net/uid-52437-id-2108789.html Lua 中的函数是一阶类型值(first-class value),定义函数就象创建普通类型 ...

  7. 修改linux的最大文件句柄数限制

                   在当前session有效,用户退出或者系统重新后恢复默认值       2)修改profile文件:在profile文件中添加:ulimit -n 65535      ...

  8. zlog学习笔记(mdc)

    mdc.h #ifndef __zlog_mdc_h #define __zlog_mdc_h #include "zc_defs.h" typedef struct zlog_m ...

  9. C# .net中cookie值为中文时的乱码解决方法

    一.cookie的名称或子cookie的名称不能为中文,否则无法获得cookie 这个好办,名称不用中文即可 二.cookie的值为中文时候,取cookie的值会出现乱码 解决办法:存取cookie时 ...

  10. CSS3 perspecitve属性

    M M .div1 { position: relative; height: 150px; width: 150px; margin: 0px; padding:2px; border: 1px s ...