高斯核函数

$K(x, y)$ 表示x和y的点乘: $$K(x, y) = e^{-\gamma {\rVert x - y\rVert}^2}$$

Radio Basis Function Kernel(RBF核)

将原来的样本点映射成新的数据向量,再做点乘。- 将每一个样本点映射到一个无穷维的特征空间

多项式特征是依靠升维使得原本线性不可分的数据线性可分。

landmark $l_1, l_2$ 地标 假设有2个地标 $l_1, l_2$, 对于每一个x,将其映射为一个二维坐标如下:

$$ x \to (e^{-\gamma {\rVert x - l_1\rVert}^2}, e^{-\gamma {\rVert x - l_2\rVert}^2}) $$

因为在高斯核函数中,每一个样本点都是一个landmark,每个样本点都要对所有样本点做运算, 因此它是将m*n的数据映射成了m*m的数据。

高斯核函数计算开销大,初始样本维度很高,但是样本点不多,及m < n的情况下,则用RBF有优势。

高斯核函数将1维数据映射到二维空间

一维数组,> -2, < 2的数为1, 其他为0, 在一维空间无法区分

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

通过RBF转换为二维数组:

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])

Question, [0] 无法理解: 生成一个和第一个参数长度相等的值为0的数组

plt.scatter(x[y==0], [0]*len(x[y==0]))
plt.scatter(x[y==1], [0]*len(x[y==1]))