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

一个简单的分类问题, 如图左半部分所示. 很明显, 我们需要一个决策边界为椭圆形的非线性分类器.
ellipse
我们可以利用原来的特征构造新的特征: \((x_1, x_2) \to (x_1^2, \sqrt 2 x_1x_2, x_2^2)\), 如此一来, 原来的数据从二维空间被映射到了三维. 这个时候, 原来线性不可分的数据已经线性可分了:

\[\frac {x_1^2}{a^2} + 0*\sqrt 2 x_1x_2 + \frac {x_2^2}{b^2} = 1 \]

在二维空间里, 它是一个椭圆;在三维空间里它是一个平面: \(A x + Bz = 1\), 其中\(A = \frac 1{a^2}, B = \frac 1{b^2}\).

为方便描述, 现在我们来给出一些要用到的定义:

  • 原始输入(raw input): 直接输入分类器的特征数据:\(x = (x_1, x_2, \dots, x_n)\). 它们所在的空间被称为输入空间(input space): \(\chi \in R^n\)
  • 特征映射函数\(\Phi\):\(R^n \to R^d\), \(\Phi(x) = z = (z_1, z_2, \dots, z_d)\), 它将原始输入映射到一个\(d\)维空间, 称为特征空间(feature space):\(H \in R^d\). \(d\)一般要大于\(n\)

再看一个例子. 这个特征空间\(H\)是一个二维空间, 数据样本是线性可分的. 现在我们根据一种简单的分类原则来求出一个线性分类器.
simple classifier
分类原则如下:

  • 特征空间中有正(+)负(o)两类样本, 它的中心点分别为\(c_+ = \frac {1}{m_+}\sum_{y_i = 1}z_i\), \(c_- = \frac {1}{m_-}\sum_{y_i = -1}z_i\), \(m_+, m_-\)分别为正负样本的个数.
  • \(c_+, c_-\)两点的中点为\(c = \frac {c_+ + c_-}{2}\)
  • 测试样本\(x\)在特征中空间中的表达为\(z=\Phi(x)\).
  • 若向量\(z - c\)与向量\(c_+ - c_-\)之间的夹角小于\(90^\circ\), 则\(z\)为正类, 否则为负类.

分析:(<a,b>代表向量\(a,b\)的点积操作)
\(z - c\)\(c_+ - c_-\)之间的夹角小于\(90^\circ\): \(<(z - c) , (c_+ - c_-) > > 0\)
\(z - c\)\(c_+ - c_-\)之间的夹角大于\(90^\circ\): \(<(z - c) , (c_+ - c_-) > < 0\)
\(\therefore y(x) = sgn(<(z - c) , (c_+ - c_-) >)\), 而

\[<(z - c) , (c_+ - c_-)> = <z , (c_+ - c_-)> - <c , (c_+ - c_-)> $$ $$= \frac 1{m_+} \sum_{{y_i = 1}} <z , z_i> - \frac 1{m_-} \sum_{{y_i = -1}} <z , z_i> + b$$, 其中 $b=\frac 12 <(c_+ + c_-)><c_+ + c_-> = \frac 12 (<c_+, c_+> - <c_-, c_->)$ $$ = \frac 12 (\frac 1{m_+^2}\sum_{{y_i = y_j = 1}}<z_i, z_j> - \frac 1{m_-^2}\sum_{{y_i = y_j = -1}}<z_i, z_j>\]

可以看出, **预测输入\(x\)的标签\(y\), 只需要特征空间上的内积操作. ** 而特征空间上的内积结果得到的一个关于原输入数据的函数就是kernel function , 核函数 \(\kappa: \chi^2 \to R\).

\[\kappa(x_i, x_j) = <z_i, z_j> = <\Phi(x_i), \Phi(x_j)> \]

代入上式得:

\[y(x)=sign(\frac 1{m_+} \sum_{{y_i = 1}} \kappa(x , x_i) - \frac 1{m_-} \sum_{{y_i = -1}} \kappa(x, x_i)+ \frac 12 (\frac 1{m_+^2}\sum_{{y_i = y_j = 1}}\kappa(x_i, x_j) - \frac 1{m_-^2}\sum_{{y_i = y_j = -1}}\kappa(x_i, x_j)) \]

很明显, 知道了kernel function \(\kappa\)后, 特征映射函数\(\Phi\)反而没有必要使用它了. 在实际应用中也是这样: 将一个机器学习算法, 如SVM, PCA, Linear Regression等, 转换为对应的kernel 版本时, 只需要选定一个kernel function \(\kappa\)就行了, 并不需要选择对应的特征映射函数\(\Phi\).

posted @ 2016-05-21 13:51  宁静是一种习惯  阅读(1292)  评论(0编辑  收藏  举报