文章目录

  • 1.内积(点积)
  • 2.核方法 [^1]
  • 3.核方法的定义和例子[^2]
  • 4. 常见的核方法
    • 4.1 线性核
    • 4.2 多项式核

1.内积(点积)

内积,又叫做点积,数量积或标量积。假设存在两个向量a=[a1,a2,...,an]a=[a_{1}, a_{2}, ..., a_{n}]a=[a1​,a2​,...,an​]和b=[b1,b2,...,bn]b=[b_{1},b_{2},...,b_{n}]b=[b1​,b2​,...,bn​],内积的计算方法为:
a⋅b=a1b1+a2b2+⋯+anbna\cdot b= a_{1}b_{1}+a_{2}b_{2}+\cdots +a_{n}b_{n} a⋅b=a1​b1​+a2​b2​+⋯+an​bn​

2.核方法 1

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

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

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

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

例如,给定两个nnn维向量xxx和yyy,x,y∈Rnx,y\in \mathbb{R}^{n}x,y∈Rn,我们定义一个核函数K(x,y)=(xTy)2K(x,y)=(x^{T}y)^{2}K(x,y)=(xTy)2,将该二次多项式展开会得到如下表达式:(x1y1+...+xnyn)2(x_{1}y_{1}+...+x_{n}y_{n})^{2}(x1​y1​+...+xn​yn​)2。
但K(x,y)K(x,y)K(x,y)还可以写成:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ K(x,y)&=(x^{T}…
如果nnn为2的话,即xT=(x1,x2)x^{T}=(x_{1},x_{2})xT=(x1​,x2​),yT=(y1,y2)y^{T}=(y_{1},y_{2})yT=(y1​,y2​)。若直接对(xTy)2(x^{T}y)^{2}(xTy)2进行计算
(xTy)2=(x1y1+x2y2)2=(x1y1)2+2x1y1x2y2+(x2y2)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} (xTy)2=(x1​y1​+x2​y2​)2=(x1​y1​)2+2x1​y1​x2​y2​+(x2​y2​)2
如果我们先对xxx和yyy进行映射,ϕ(x)\phi(x)ϕ(x)可以将xxx映射为:
ϕ(x)=[x1x1x1x2x2x1x2x2]\phi (x)=\begin{bmatrix} x_{1}x_{1}\\ x_{1}x_{2}\\ x_{2}x_{1}\\ x_{2}x_{2}\\ \end{bmatrix} ϕ(x)=⎣⎢⎢⎡​x1​x1​x1​x2​x2​x1​x2​x2​​⎦⎥⎥⎤​
ϕ(y)\phi(y)ϕ(y)可以将yyy映射为:
ϕ(y)=[y1y1y1y2y2y1y2y2]\phi (y)=\begin{bmatrix} y_{1}y_{1}\\ y_{1}y_{2}\\ y_{2}y_{1}\\ y_{2}y_{2}\\ \end{bmatrix}ϕ(y)=⎣⎢⎢⎡​y1​y1​y1​y2​y2​y1​y2​y2​​⎦⎥⎥⎤​

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

再比如,对于核函数:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ K(x,y)&=(x^{T}…
同上,若xxx和yyy均为二维向量,则映射函数为:
ϕ=[x1x1x1x2x2x1x2x22cx12cx2]\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} ϕ=⎣⎢⎢⎢⎢⎢⎢⎡​x1​x1​x1​x2​x2​x1​x2​x2​2c​x1​2c​x2​​⎦⎥⎥⎥⎥⎥⎥⎤​
从多项式可以看到,参数ccc控制着一阶和二阶多项式的权重。如果将二阶多项式推广到ddd阶,则核函数K(x,y)=(xTy+c)dK(x,y)=(x^{T}y+c)^{d}K(x,y)=(xTy+c)d会将原来的向量映射到(n+dd)\begin{pmatrix} n+d\\ d\\\end{pmatrix}(n+dd​)维,尽管在该空间中的复杂度为O(nd)O(n^{d})O(nd),但经过$\phi 映射后计算复杂度为映射后计算复杂度为映射后计算复杂度为O(n)$。

4. 常见的核方法

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

4.1 线性核

核函数:
K(x,y)=xTyK(x,y)=x^{T}y K(x,y)=xTy
令x=(x1,x2)Tx=(x_{1},x_{2})^{T}x=(x1​,x2​)T,y=(y1,y2)Ty=(y_{1},y_{2})^{T}y=(y1​,y2​)T,即维度为2,我们得到:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ K(\begin{pmatr…
可以看到线性核的映射ϕ(x)\phi (x)ϕ(x)就是xxx本身。

代码:

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_circlesdef feature_map_1(X):return np.asarray((X[:,0], X[:,1], X[:,0]*X[:,1])).TX, 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所示,但从结果发现,线性映射之后的数据点仍然不是线性可分的。

4.2 多项式核

二维二阶多项式核函数:

因此,ϕ((x1x2))=(2x1x2x12x22)\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}ϕ((x1​x2​​))=⎝⎛​2​x1​x2​x12​x22​​⎠⎞​

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

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_circlesdef feature_map_0(X):return np.asarray((X[:,0]**2, X[:,1]**2, np.sqrt(2)*X[:,0]*X[:,1])).TX, 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')

本文原载于我的简书。

参考


  1. 核方法 ↩︎

  2. Kernels and Feature maps: Theory and intuition ↩︎

核方法 Kernel method相关推荐

  1. 核方法(kernel method)的主要思想

    本文对核方法(kernel method)进行简要的介绍. 核方法的主要思想是基于这样一个假设:"在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的&quo ...

  2. 【优化】核方法(kernel method)超简说明

    本文不做数学推导,仅从最简单的概念上讲解核方法. 问题 有训练样本 x i x_i xi​,其标定 y i y_i yi​, i=1,2-N. 欲求解一个回归函数 f ( z ) f(z) f(z), ...

  3. Kernel Method核方法—应用与理解

    前一篇主要梳理了几个基本概念以及相关关系,这一篇主要针对核方法的应用进行讨论,并理解核方法的思想,了解为什么要引入核方法. 核方法在机器学习中是一种灵活的技术,主要归结为两个方面: 非线性问题转换为高 ...

  4. Kernel Method核方法—基本概念

    这里只是简单叙述了核方法中运用到的几个概念和相互的关系,包括什么是核函数Kernel function.正定函数Positive definite function.再生核希尔伯特空间Reproduc ...

  5. 机器学习与高维信息检索 - Note 6 - 核, 核方法与核函数(Kernels and the Kernel Trick)

    Note 6 核, 核方法与核函数 到目前为止,我们所讨论的机器学习算法的成功都依赖于对输入数据分布的假设.例如,PCA的效果越好,数据围绕线性子空间分布.或者在线性判别分析中,我们假设类的高斯分布, ...

  6. matlab求logistics映射 的le_高维映射 与 核方法(Kernel Methods)

    高维映射跟核方法的概念很容易混淆. 高维映射通过将样本从原始空间映射到一个更高维的特征空间,从而解决了低纬下难以解决的问题. 核方法往往跟高维映射配合使用,可以看做是一种技巧,可以通过它来避免这种映射 ...

  7. DNN盛行的当下,老旧的核(kernel)方法或能打开神经网络的魔盒

    ©作者 | 杜伟 来源 | 机器之心 重新思考「老旧的」核(kernel)方法,或许可以破解深度学习的奥秘. 在机器学习(ML)的世界,人工神经网络(ANN)越来越大的演化趋势以及超大规模网络取得的成 ...

  8. paper 6:支持向量机系列三:Kernel —— 介绍核方法,并由此将支持向量机推广到非线性的情况。...

    前面我们介绍了线性情况下的支持向量机,它通过寻找一个线性的超平面来达到对数据进行分类的目的.不过,由于是线性方法,所以对非线性的数据就没有办法处理了.例如图中的两类数据,分别分布为两个圆圈的形状,不论 ...

  9. 关系抽取论文整理,核方法、远程监督的重点都在这里

    来源 | CSDN 博客 作者 | Matt_sh,编辑 | Carol 来源 | CSDN云计算(ID:CSDNcloud) 本文是个人阅读文章的笔记整理,没有涉及到深度学习在关系抽取中的应用. 笔 ...

  10. Kernel Method的理解

    kernel method是针对低维线性不可分而提出的一种解决方法,在PRML中有一章节的介绍,对其理解,也是迭代更进的过程. 简单来说,kernel method是一种低维和高维特征空间映射的方法, ...

最新文章

  1. Java获取文件的目录_Java实现读取某个路径下的文件目录
  2. ***CI中的数据库操作(insert_id新增后返回记录ID)
  3. 深度学习:网络的编程模式比较
  4. [Unity] TortoiseSVN 的 CheckOut 未响应的解决记录
  5. .net framework 4.0 安装失败解决办法
  6. 如何开具和交付给客户电子发票
  7. python是什么语言-python底层是什么语言
  8. 独立软件测试团队在敏捷开发中的几个特别实践
  9. 基于《知网》的词汇语义相似度计算
  10. MiCT: Mixed 3D/2D convolutional tube for human action recognition
  11. Oliver的救援【BFS】
  12. js 负数转换正_如何使用JavaScript将负数转换为正数?
  13. SpringCloud-11-解决[NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has bee
  14. 广色域图片Android,广色域手机很厉害?其实安卓手机屏幕的色彩问题一
  15. P1108 低价购买(DP)
  16. java麻将软件_dnf徽章加什么
  17. 下载Linux ISO镜像的方法 (带你快速了解)
  18. uniapp 搜索关键字高亮显示实现
  19. lilypond笔记 -- Chopin Prelude G major
  20. 工程打包是什么意思_各位前辈,请问工程合同大包价是什么意思?是包死价吗?...

热门文章

  1. 视频教程-EOS 入门实战-区块链
  2. android重复点击屏幕,手机不ROOT.推荐一款android能用的屏幕连点器,类似按键精灵!...
  3. 土木工程模板计算机专业,土木工程毕业论文答辩自述模板
  4. 英特尔傲腾内存linux,英特尔傲腾技术挺简单 三分钟了解这项黑科技
  5. PyQt窗口设计之Qt Designer
  6. 通过jacob实现office在线预览
  7. HP M1136无法打印的解决方法
  8. 获取emf图片格式的方法
  9. 常用的第三方ui框架
  10. 电脑一复制粘贴就卡死_CAD复制粘贴时卡死的解决方法步骤