一个简单的分类问题, 如图左半部分所示. 很明显, 我们需要一个决策边界为椭圆形的非线性分类器.

我们可以利用原来的特征构造新的特征: \((x_1, x_2) \to (x_1^2, \sqrt 2 x_1x_2, x_2^2)\), 如此一来, 原来的数据从二维空间被映射到了三维. 这个时候, 原来线性不可分的数据已经线性可分了:
\[\frac {x_1^2}{a^2} + 0*\sqrt 2 x_1x_2 + \frac {x_2^2}{b^2} = 1\]
在二维空间里, 它是一个椭圆;在三维空间里它是一个平面: \(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 \to 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\)的点积操作)
若\(z - c\)与\(c_+ - c_-\)之间的夹角小于\(90^\circ\): \(<(z - c) , (c_+ - c_-) > > 0\)
若\(z - c\)与\(c_+ - c_-\)之间的夹角大于\(90^\circ\): \(<(z - c) , (c_+ - c_-) > < 0\)
\(\therefore y(x) = sgn(<(z - c) , (c_+ - c_-) >)\), 而
\[<(z - c) , (c_+ - c_-)> = <z , (c_+ - c_-)> - <c , (c_+ - c_-)> \] \[= \frac 1{m_+} \sum_{{y_i = 1}} <z , z_i> - \frac 1{m_-} \sum_{{y_i = -1}} <z , z_i> + b\], 其中
\(b=\frac 12 <(c_+ + c_-)><c_+ + c_-> = \frac 12 (<c_+, c_+> - <c_-, c_->)\)
\[ = \frac 12 (\frac 1{m_+^2}\sum_{{y_i = y_j = 1}}<z_i, z_j> - \frac 1{m_-^2}\sum_{{y_i = y_j = -1}}<z_i, z_j>\]
可以看出, 预测输入\(x\)的标签\(y\), 只需要特征空间上的内积操作. 而特征空间上的内积结果得到的一个关于原输入数据的函数就是kernel function , 核函数 \(\kappa: \chi^2 \to R\).
\[\kappa(x_i, x_j) = <z_i, z_j> = <\Phi(x_i), \Phi(x_j)>\]
代入上式得:
\[y(x)=sign(\frac 1{m_+} \sum_{{y_i = 1}} \kappa(x , x_i) - \frac 1{m_-} \sum_{{y_i = -1}} \kappa(x, x_i)+ \frac 12 (\frac 1{m_+^2}\sum_{{y_i = y_j = 1}}\kappa(x_i, x_j) - \frac 1{m_-^2}\sum_{{y_i = y_j = -1}}\kappa(x_i, x_j))\]
很明显, 知道了kernel function \(\kappa\)后, 特征映射函数\(\Phi\)反而没有必要使用它了. 在实际应用中也是这样: 将一个机器学习算法, 如SVM, PCA, Linear Regression等, 转换为对应的kernel 版本时, 只需要选定一个kernel function \(\kappa\)就行了, 并不需要选择对应的特征映射函数\(\Phi\).

Kernel Methods (1) 从简单的例子开始的更多相关文章

  1. PRML读书会第六章 Kernel Methods(核函数,线性回归的Dual Representations,高斯过程 ,Gaussian Processes)

    主讲人 网络上的尼采 (新浪微博:@Nietzsche_复杂网络机器学习) 网络上的尼采(813394698) 9:16:05 今天的主要内容:Kernel的基本知识,高斯过程.边思考边打字,有点慢, ...

  2. Kernel Methods - An conclusion

    Kernel Methods理论的几个要点: 隐藏的特征映射函数\(\Phi\) 核函数\(\kappa\): 条件: 对称, 正半定; 合法的每个kernel function都能找到对应的\(\P ...

  3. Kernel methods on spike train space for neuroscience: a tutorial

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! 时序点过程:http://www.tensorinfinity.com/paper_154.html Abstract 在过去的十年中,人 ...

  4. Kernel Methods (2) Kernel function

    几个重要的问题 现在已经知道了kernel function的定义, 以及使用kernel后可以将非线性问题转换成一个线性问题. 在使用kernel 方法时, 如果稍微思考一下的话, 就会遇到以下几个 ...

  5. 核方法(Kernel Methods)

    核方法(Kernel Methods) 支持向量机(SVM)是机器学习中一个常见的算法,通过最大间隔的思想去求解一个优化问题,得到一个分类超平面.对于非线性问题,则是通过引入核函数,对特征进行映射(通 ...

  6. 简单的例子了解自定义ViewGroup(一)

    在Android中,控件可以分为ViewGroup控件与View控件.自定义View控件,我之前的文章已经说过.这次我们主要说一下自定义ViewGroup控件.ViewGroup是作为父控件可以包含多 ...

  7. CSharpGL(1)从最简单的例子开始使用CSharpGL

    CSharpGL(1)从最简单的例子开始使用CSharpGL 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo ...

  8. Kernel Methods (4) Kernel SVM

    (本文假设你已经知道了hard margin SVM的基本知识.) 如果要为Kernel methods找一个最好搭档, 那肯定是SVM. SVM从90年代开始流行, 直至2012年被deep lea ...

  9. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

随机推荐

  1. 在Docker中运行web应用

    启动一个简单的web 应用 使用社区提供的模板,启动一个简单的web应用,熟悉下各种Docker命令的使用: # docker run -d -P training/webapp python app ...

  2. nginx 入门

    1.nginx 如何处理一个请求 IP,域名的处理 server { listen  80  default_server;     //添加 default_server就是一个默认的server ...

  3. 创建简单的机器人模型smartcar

    前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简单的智能车机器人 smartcar,为后面建立复杂机器人打下基础. 一.创建硬件描述包. cd ~/catkin_ws/srcroscr ...

  4. RPM方式编译升级centos内核

    [root@iZ2893wjzgyZ ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org [root@iZ2893wjzgyZ ...

  5. 关于调试日志Log

    __VA_ARGS__  是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参数的个数为0时,这里的## ...

  6. html中label宽度设置、非替换元素和替换元素

    <label ></label> 单独对label设置一个width:100px的属性石不起作用的,和float:left或者display:inline-block配合的话 ...

  7. xhEditor用法

    xhEditor是一个基于jQuery开发的简单迷你并且高效的在线可视化HTML编辑器,而且兼容很多浏览器,所以就选它了,具体使用如下: 1 .下载xhEditor 最新版本 下载地址:http:// ...

  8. typeof关键字简介 -rtti

    typeof关键字是C语言中的一个新扩展.只要可以接受typedef名称,Sun Studio C 编译器就可以接受带有typeof的结构,包括以下语法类别: 声明 函数声明符中的参数类型链表和返回类 ...

  9. HoloLens开发手记 - Unity development overview 使用Unity开发概述

    Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...

  10. 系统升级日记(2)- 升级到SharePoint Server 2013

    最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记录旨在记 ...