Processing math: 100%

K(x, y)表示x和y的点乘。高斯核函数的公式为:

公式中的γ是高斯核函数中唯一的超参数。
高斯核函数 = RBF核 = Radial Basis Function Kernel = 镜像基函数
高斯核函数本质是将每个样本点映射到一个无穷维的特征空间

多项式特征为什么能处理线性不可分的问题?

依靠升维使得原本线性不可分的数据线性可分
例如有一组原本线性不可分的一维数据:
给数据增加一个内容为x^2的维度,数据就变成了这样: 现在很容易找到一根直线把两类数据区分开:

使用高斯核函数升维

再来看复用高斯核函数的例子。为了方便可视化,将原K做一些改变。
在原K中,是x相对y的映射,改成x相对两个固定的点的映射。
这两个固定的点就是图中的三角形位置。 l:landmark,地标

代码模拟高斯核函数的映射效果

import numpy as np import matplotlib.pyplot as plt x = np.arange(-4, 5, 1) # x = array([-4, -3, -2, -1, 0, 1, 2, 3, 4]) y = np.array((x>=-2) & (x<=2), dtype='int') # y = array([0, 0, 1, 1, 1, 1, 1, 0, 0]) plt.scatter(x[y==0], [0]*len(x[y==0])) plt.scatter(x[y==1], [0]*len(x[y==1])) plt.show()

def gaussian(x, l): gamma = 1.0 return np.exp(-gamma * (x-l)**2) l1, l2 = -1, 1 X_new = np.empty((len(x),2)) for i, data in enumerate(x): X_new[i, 0] = gaussian(data, l1) X_new[i, 1] = gaussian(data, l2) plt.scatter(X_new[y==0,0], X_new[y==0,1]) plt.scatter(X_new[y==1,0], X_new[y==1,1]) plt.show()

这样就得到了一个线性可分的结果:

解释

在这个例子中,使用图中的公式2来对x做映射,公式中的l1和l2是地标。
但实际的高斯公式是公式1,公式中的y是每一个数据点,也就是说,在高斯核函数中,每个样本都是一个地标landmark。它将m*n的数据映射成了m*m的数据。
使用高斯核函数训练样本,计算量非常大,训练时间也很长。
当m < n时,适用使用高斯核函数,例如自然语言处理。