核方法 Kernel method

1.内积(点积)

内积,又叫做点积,数量积或标量积。假设存在两个向量a=[a_{1}, a_{2}, ..., a_{n}]b=[b_{1},b_{2},...,b_{n}],内积的计算方法为:
a\cdot b= a_{1}b_{1}+a_{2}b_{2}+\cdots +a_{n}b_{n}

2.核方法 [1]

核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的” ,例如有两类数据,一类为x<a\cup x>b;另一部分为a<x<b。要想在一维空间上线性分开是不可能的。然而我们可以通过F(x)=(x-a)(x-b)把一维空间上的点转化到二维空间上,这样就可以划分两类数据F(x)>0F(x)<0;从而实现线性分割。如下图所示:

图1

定义一个核函数K(x_{1},x_{2})=\left \langle \phi (x_{1}),\phi (x_{2})\right \rangle, 其中x_{1}x_{2}是低维度空间中的点(在这里可以是标量,也可以是向量),\phi (x_{i})是低维度空间的点转化为高维度空间中的点的表示,\left \langle ,\right \rangle表示向量的内积。这里核函数的表达方式一般都不会显式地写为内积的形式,即我们不关心高维度空间的形式。
这里有个很重要的问题,就是我们为什么要关心内积。一般的我们可以把分类或回归问题分为两类:参数学习和基于实例的学习。参数学习就是通过一堆训练数据把模型的参数学习出来,训练完成之后训练数据就没有用了,新数据使用已经训练好的模型进行预测,例如人工神经网络。而基于实例的学习(又叫基于内存的学习)是在预测的时候会使用训练数据,例如KNN算法,会计算新样本与训练样本的相似度。计算相似度一般通过向量的内积来表示。从这里可以看出,核方法不是万能的,它一般只针对基于实例的学习。

3.核方法的定义和例子[2]

给定一个映射关系\phi,我们定义相应的核函数为:
K(x,y)=\phi (x)^{T}\phi (y)
则内积运算<\phi (x), \phi (y)>可以用核K(x,y)来表示。

例如,给定两个n维向量xyx,y\in \mathbb{R}^{n},我们定义一个核函数K(x,y)=(x^{T}y)^{2},将该二次多项式展开会得到如下表达式:(x_{1}y_{1}+...+x_{n}y_{n})^{2}
K(x,y)还可以写成:
\begin{align} K(x,y)&=(x^{T}y)^2 \\ &=(\sum_{i}^{n}x_{i}y_{i})(\sum_{j}^{n}x_{j}y_{j})\\ &=\sum_{i}^{n}\sum_{j}^{n}x_{i}x_{j}y_{i}y_{j}\\ &=\sum_{i,j}^{n}(x_{i}x_{j})(z_{i}z_{j})\\ &=\phi (x)^{T}\phi (y) \end{align}
如果n为2的话,即x^{T}=(x_{1},x_{2})y^{T}=(y_{1},y_{2})。若直接对(x^{T}y)^{2}进行计算
(x^{T}y)^{2}=(x_{1}y_{1}+x_{2}y_{2})^{2}=(x_{1}y_{1})^{2}+2x_{1}y_{1}x_{2}y_{2}+(x_{2}y_{2})^{2}
如果我们先对xy进行映射,\phi(x)可以将x映射为:
\phi (x)=\begin{bmatrix} x_{1}x_{1}\\ x_{1}x_{2}\\ x_{2}x_{1}\\ x_{2}x_{2}\\ \end{bmatrix}
\phi(y)可以将y映射为:
\phi (y)=\begin{bmatrix} y_{1}y_{1}\\ y_{1}y_{2}\\ y_{2}y_{1}\\ y_{2}y_{2}\\ \end{bmatrix}

然后再对\phi (x)\phi (y)进行内积运算:
<\phi (x), \phi (y)>=(x_{1}y_{1})^{2}+2x_{1}x_{2}y_{1}y_{2}+(x_{2}y_{2})^{2}
我们发现结果和直接展开运算一样,但是直接展开经过了一次平方运算,复杂度为O(n^{2}),而经过映射之后只需一次内积运算,复杂度为O(n),大大提高了效率。

再比如,对于核函数:
\begin{align} K(x,y)&=(x^{T}y+c) \\ &=\sum_{i,j}^{n}(x_{i}x_{j})(y_{i}y_{j})+\sum_{i}^{n}(\sqrt{2c}x_{i})(\sqrt{2c}y_{i})+c^{2}\\ \end{align}
同上,若xy均为二维向量,则映射函数为:
\phi =\begin{bmatrix} x_{1}x_{1}\\ x_{1}x_{2}\\ x_{2}x_{1}\\ x_{2}x_{2}\\ \sqrt{2c}x_{1}\\ \sqrt{2c}x_{2}\\ \end{bmatrix}
从多项式可以看到,参数c控制着一阶和二阶多项式的权重。如果将二阶多项式推广到d阶,则核函数K(x,y)=(x^{T}y+c)^{d}会将原来的向量映射到\begin{pmatrix} n+d\\ d\\\end{pmatrix}维,尽管在该空间中的复杂度为O(n^{d}),但经过\phi映射后计算复杂度为O(n)

4. 常见的核方法

常见的三种核方法:
线性核(Linear kernel):K(x,y)=x^{T}y
径向基核(Radial basis function kernel, RBF kernel):K(x,y)=exp(-\gamma \left \| x-y\right \|^{2})
d次多项式核(Polynomial kernel):K(x,y)=(x^{T}y+c)^{d}
下面我们依次使用这些核函数对非线性问题进行分类,如下图所示,有两个待分类标签,显然他们在二维空间是线性不可分的,我们需要使用核函数把它们映射到更高维空间中,让它们线性可分。

图2

4.1 线性核

核函数:
K(x,y)=x^{T}y
x=(x_{1},x_{2})^{T}y=(y_{1},y_{2})^{T},即维度为2,我们得到:
\begin{align} K(\begin{pmatrix} x_{1}\\ x_{2}\\ \end{pmatrix}, \begin{pmatrix} y_{1}\\ y_{2}\\ \end{pmatrix})&=x^{T}y\\ &=x_{1}y_{1}+x_{2}y_{2}\\ &=\begin{pmatrix} x_{1} & x_{2} \end{pmatrix} \begin{pmatrix} y_{1}\\ y_{2}\\ \end{pmatrix} \end{align}
可以看到线性核的映射\phi (x)就是x本身。

代码:

import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits import mplot3d
from IPython.display import HTML, Image

%matplotlib inline
sns.set()

from sklearn.datasets import make_circles

def feature_map_1(X):
    return np.asarray((X[:,0], X[:,1], X[:,0]*X[:,1])).T

X, y = make_circles(100, factor=.1, noise=.1)
Z = feature_map_1(X)

#2D scatter plot
fig = plt.figure(figsize = (16,8))
ax = fig.add_subplot(1, 2, 1)
ax.scatter(X[:,0], X[:,1], c = y, cmap = 'viridis')
ax.set_xlabel('$x_1$')
ax.set_ylabel('$x_2$')
ax.set_title('Original dataset')

#3D scatter plot
ax = fig.add_subplot(1, 2, 2, projection='3d')
ax.scatter3D(Z[:,0],Z[:,1], Z[:,2],c = y, cmap = 'viridis' ) #,rstride = 5, cstride = 5, cmap = 'jet', alpha = .4, edgecolor = 'none' )
ax.set_xlabel('$z_1$')
ax.set_ylabel('$z_2$')
ax.set_zlabel('$z_3$')
ax.set_title('Transformed dataset')

我们将线性核函数映射后的数据可视化,得到的结果如图3所示,但从结果发现,线性映射之后的数据点仍然不是线性可分的。

图3

4.2 多项式核

二维二阶多项式核函数:


因此,\phi (\begin{pmatrix} x_{1}\\ x_{2} \\ \end{pmatrix})=\begin{pmatrix} \sqrt{2}x_{1}x_{2}\\ x_{1}^{2}\\ x_{2}^{2}\\ \end{pmatrix}

画出经二阶多项式映射后的数据分布:

import numpy as np
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits import mplot3d
from IPython.display import HTML, Image

#%matplotlib inline
sns.set()

from sklearn.datasets import make_circles

def feature_map_0(X):
    return np.asarray((X[:,0]**2, X[:,1]**2, np.sqrt(2)*X[:,0]*X[:,1])).T

X, y = make_circles(100, factor=.1, noise=.1)
Z = feature_map_0(X)

#2D scatter plot
fig = plt.figure(figsize = (16,8))
ax = fig.add_subplot(1, 2, 1)
ax.scatter(X[:,0], X[:,1], c = y, cmap = 'viridis')
ax.set_xlabel('$x_1$')
ax.set_ylabel('$x_2$')
ax.set_title('Original dataset')

#3D scatter plot
ax = fig.add_subplot(1, 2, 2, projection='3d')
ax.scatter3D(Z[:,0],Z[:,1], Z[:,2],c = y, cmap = 'viridis' ) #,rstride = 5, cstride = 5, cmap = 'jet', alpha = .4, edgecolor = 'none' )
ax.set_xlabel('$z_1$')
ax.set_ylabel('$z_2$')
ax.set_zlabel('$z_3$')
ax.set_title('Transformed dataset')
图4

参考


  1. 核方法

  2. Kernels and Feature maps: Theory and intuition

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345