一个简单的分类问题, 如图左半部分所示. 很明显, 我们需要一个决策边界为椭圆形的非线性分类器.
我们可以利用原来的特征构造新的特征: ((x_1, x_2) o (x_1^2, sqrt 2 x_1x_2, x_2^2)), 如此一来, 原来的数据从二维空间被映射到了三维. 这个时候, 原来线性不可分的数据已经线性可分了:
在二维空间里, 它是一个椭圆;在三维空间里它是一个平面: (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 o R^d), (Phi(x) = z = (z_1, z_2, dots, z_d)), 它将原始输入映射到一个(d)维空间, 称为特征空间(feature space):(H in R^d). (d)一般要大于(n)
再看一个例子. 这个特征空间(H)是一个二维空间, 数据样本是线性可分的. 现在我们根据一种简单的分类原则来求出一个线性分类器.
分类原则如下:
- 特征空间中有正(+)负(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)
( herefore y(x) = sgn(<(z - c) , (c_+ - c_-) >)), 而
可以看出, **预测输入(x)的标签(y), 只需要特征空间上的内积操作. ** 而特征空间上的内积结果得到的一个关于原输入数据的函数就是kernel function , 核函数 (kappa: chi^2 o R).
代入上式得:
很明显, 知道了kernel function (kappa)后, 特征映射函数(Phi)反而没有必要使用它了. 在实际应用中也是这样: 将一个机器学习算法, 如SVM, PCA, Linear Regression等, 转换为对应的kernel 版本时, 只需要选定一个kernel function (kappa)就行了, 并不需要选择对应的特征映射函数(Phi).