支持向量机原理小结(3)——核方法和非线性支持向量机

article/2025/9/25 18:34:53

  前面两篇博客对线性支持向量机进行了详细的讲解,但线性SVM对于非线性的数据是无可奈何的。这篇博客将讲一下非线性支持向量机。

1. 核方法

  对SVM有过一定耳闻的人,一定听说过“核技巧”、“核方法”这些名词,其实核方法并不是只能应用于SVM,还可以应用于其他地方。现在就来讲讲核方法是如何处理非线性数据的。

  假设给定如下数据(上面左图),显然我们没法用一条直线将 ′ ∘ ′ × ′ × ′ 分开,如果用一个椭圆,将会得到很好的效果。我们希望将这个非线性分类问题变换为线性问题,通过变换后的线性问题的方法求解原来的非线性问题。上图中,我们可以将左图的椭圆变换成右图中的直线,将非线性分类问题变换为线性分类问题。
  假设原空间为 XR2,x=(x(1),x(2))X X ∈ R 2 , x = ( x ( 1 ) , x ( 2 ) ) ∈ X ,新空间为 ZR2,z=(z(1),z(2))Z Z ∈ R 2 , z = ( z ( 1 ) , z ( 2 ) ) ∈ Z ,定义从原空间到新空间的变换为:

z=ϕ(x)=((x(1))2,(x(2))2) z = ϕ ( x ) = ( ( x ( 1 ) ) 2 , ( x ( 2 ) ) 2 )
经过变换 z=ϕ(x) z = ϕ ( x ) ,原空间 XR2 X ∈ R 2 变换为 ZZ2 Z ∈ Z 2 ,原空间的点相应的变换为新空间中的点,所以原空间的椭圆
w1(x(1))2+w2(x(2))2+b=0 w 1 ( x ( 1 ) ) 2 + w 2 ( x ( 2 ) ) 2 + b = 0
变换成新空间中的直线
w1z(1)+w2z(2)+b=0 w 1 z ( 1 ) + w 2 z ( 2 ) + b = 0
在变换后的新空间里,直线 w1z(1)+w2z(2)+b=0 w 1 z ( 1 ) + w 2 z ( 2 ) + b = 0 可以将变换后的正类和负类样本点正确分开。于是,原空间的非线性可分问题就变成了新空间中的线性可分问题。
  总结一下,用线性分类方法求解非线性分类问题分为两步:首先使用一个变换将原空间的数据映射到新空间; 然后再新空间里用线性分类学习方法从训练数据中学习分类模型。
   核技巧就属于这样的方法,应用到SVM上面的基本想法就是通过一个非线性变换 ϕ(x) ϕ ( x ) 将输入空间(欧式空间或离散集合)对应于一个特征空间(希尔伯特空间),使得输入空间的超曲面模型对应于特征空间中的超平面模型。幸运的是, 如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本线性可分。于是在特征空间中分离超平面所对应的模型可表示为:
f(x)=wϕ(x)+b f ( x ) = w ⋅ ϕ ( x ) + b
优化目标函数可表示为(约束条件这里就不写了):
minα12i=1mj=1mαiαjy(i)y(j)(ϕ(x(i))ϕ(x(j)))i=1mαi(1) (1) min α 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) ( ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) ) − ∑ i = 1 m α i
求解上面的优化函数涉及到计算 ϕ(x(i))ϕ(x(j)) ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) ,这是样本 x(i) x ( i ) x(j) x ( j ) 映射到特征空间的内积,由于特征空间维度可能很高,甚至是无穷维,因此直接计算 ϕ(x(i))ϕ(x(j)) ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) 通常是困难的,避开这个障碍的一个方法是引入核函数:
K(x(i),x(j))=ϕ(x(i))ϕ(x(j))(2) (2) K ( x ( i ) , x ( j ) ) = ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) )
即我们只定义核函数 K(x,z) K ( x , z ) ,而不显式地定义映射函数 ϕ(x) ϕ ( x ) ,这样我们就不用去计算高维甚至无穷维特征空间中的内积。对于给定的核函数,可以取不同的特征空间,即便是在同一特征空间里也可以取不同的映射。于是(1)可以重写为:
minα12i=1mj=1mαiαjy(i)y(j)K(x(i),x(j))i=1mαi(3) (3) min α 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y ( i ) y ( j ) K ( x ( i ) , x ( j ) ) − ∑ i = 1 m α i
用SMO算法解得 αi α i ∗ ,然后确定分离超平面和分类决策函数。算法步骤和原来SVM一模一样,几乎不需要改动,只需要将 ϕ(x(i))ϕ(x(j)) ϕ ( x ( i ) ) ⋅ ϕ ( x ( j ) ) 替换成 K(x(i),x(j)) K ( x ( i ) , x ( j ) ) 即可。

2. 核函数

  显然,如果映射 ϕ(x) ϕ ( x ) 的具体形式已知,我们可以很轻松写出核函数 K(x,z) K ( x , z ) 。但现实任务中我们通常不知道 ϕ(x) ϕ ( x ) 是什么形式,那么合适的核函数是否一定存在呢?什么样的函数才能做核函数呢?
  先上结论,一个函数能作为核函数的充要条件是——正定核函数。即核函数 K(x,z) K ( x , z ) 对应的Gram矩阵

K=[K(x(i),x(j))]m×n K = [ K ( x ( i ) , x ( j ) ) ] m × n
是半正定矩阵,那么 K(x,z) K ( x , z ) 是正定核。鉴于在实际问题中往往是应用已有的核函数,自己设计核函数是“高玩”做的事,我这里就暂且先跳过证明这一步。下面来介绍一下常用的核函数,然后再来讨论一下核函数怎么选取的问题。

线性核函数

K(x,z)=xz K ( x , z ) = x ⋅ z
也就是说,线性可分SVM其实就是使用了线性核函数的SVM,和非线性SVM只是核函数的差别,可以归为一类。

多项式核函数

K(x,z)=(γxz+r)p K ( x , z ) = ( γ x ⋅ z + r ) p
其中 γ,r,p γ , r , p 都需要我们自己调参定义。

高斯核函数

K(x,z)=exz22σ2 K ( x , z ) = e − ‖ x − z ‖ 2 2 σ 2
高斯核也称为径向基(RBF)核函数,其中 σ σ 需要自己调参定义, σ 小 的 σ 对应更高维的空间。

Sigmoid核函数

K(x,z)=tanh(γxz+r) K ( x , z ) = tanh ⁡ ( γ x ⋅ z + r )
其中 γ,r γ , r 都要自己调参定义。

3. 核函数的选取

  一般情况下用的是线性核和高斯核,注意要对数据进行归一化处理。一般情况下高斯核的效果不会差于线性核,只不过高斯核计算量比线性核大。吴恩达课程里总结了这么几点:
  (1) 当输入特征维度很大,和样本数量差不多时,这时选用线性核。因为特别高维度的空间,往往是线性可分的(核函数的动机不就是将低维特征映射到高维特征吗,既然已经维度很高,那么很有可能是线性可分的)。
  (2) 当输入特征维度比较小,样本数量一般,选择高斯核较好。
  (3) 当输入特征维度比较小,样本数量很多,则需要手工添加一些特征变成第一种情况。
  线性核其实就是高斯核的一个特例,所以使用了高斯核的情况下就没必要考虑线性核了;在某些参数下,RBF和Sigmoid具有相似的性能;相比多项式核函数,RBF的参数较少,更容易选择。基于这些原因,高斯核是应用最广的核函数。

4. 小结

  对非线性SVM算法流程做一个小结:
输入:线性可分数据集 T={(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))} T = { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … , ( x ( m ) , y ( m ) ) } y(i){1,+1} y ( i ) ∈ { − 1 , + 1 }
输出:分离超平面和分类决策函数
(1)选取适当的核函数 K(x,z) K ( x , z ) 和惩罚系数 C C 构造约束最优化问题:

minα12i=1mj=1mαiαjy(i)y(j)K(x(i),x(j))i=1mαis.t. i=1mαiy(i)=00αiC, i=0,1,2,,m
(2)使用SMO算法求解上述问题并解得 α α ∗
(3)计算得到 w w ∗ b b ∗

wb=i=1mαiy(i)x(i)=1pj=1p(y(j)i=1mαiy(i)K(x(i),x(j)) w ∗ = ∑ i = 1 m α i ∗ y ( i ) x ( i ) b ∗ = 1 p ∑ j = 1 p ( y ( j ) − ∑ i = 1 m α i ∗ y ( i ) K ( x ( i ) , x ( j ) )
(4)求得分离超平面:
i=1mαiy(i)K(x(i),x(j)))+b=0 ∑ i = 1 m α i ∗ y ( i ) K ( x ( i ) , x ( j ) ) ) + b ∗ = 0
分类决策函数:
f(x)=sign(i=1mαiy(i)K(x(i),x(j))+b) f ( x ) = s i g n ( ∑ i = 1 m α i ∗ y ( i ) K ( x ( i ) , x ( j ) ) + b ∗ )

  SVM的最后一篇博客将讲一下之前遗漏的SMO算法。


http://chatgpt.dhexx.cn/article/5NM1jqQy.shtml

相关文章

核方法以及核函数讲解

核方法的主要思想是基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集时,很有可能变为线性可分的” ,例如下图 左图的两类数据要想在一维空间上线性分开是不可能的,然而通过F(x)(x-a)(x-…

MLAPP————第十四章 核方法

第十四章 核方法 14.1 简介 到目前为止,我们书上提到的各种方法,包括分类,聚类或者是其它的一些处理手段,我们的特征都是固定大小的一个向量,一般具有如下的形式,。然而,对于某些类型的对象&a…

核方法的理解

核方法在非线性分类问题上有很好的解决思路,应用于学习器SVM以及降维KPCA上,当然二者路径也不同,SVM就是从低维不可分映射到高维可分,而KPCA是从低维不可分映射到高维后再降维到低维可分,但都脱离不来这个核方法。 核…

核方法原理

核方法原理 1.无力的线性分类器 一般情况下,我们考虑构造一个线性分类器来解决问题。但是实际中,线性分类器的效果达不到要求,因为大部分数据都不是线性可分的,如下面这幅图。一种改进的方法是把多个弱的线性分类器组合得到一个强…

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

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

python svm核函数_Python.SVM(三)核方法

Python.SVM(三)核方法 1 什么是核方法 往简单里说,核方法是将一个低维的线性不可分的数据映射到一个高维的空间、并期望映射后的数据在高维空间里是线性可分的。 我们以异或数据集为例:在二维空间中、异或数据集是线性不可分的;但是通过将其映…

核方法回归

参考论文-DENSITY ESTIMATION FOR STATISTICS AND DATA ANALYSIS 给定数据集,来估计概率密度函数 Histograms The naive estimator 也是分成段的平行x轴直线连接起来 The kernel estimator 其中kernel可以是高斯核,结果图: 可以见到,高斯核…

【机器学习】SVM核方法

https://blog.csdn.net/qq_32742009/article/details/81430534 Kernel Trick 在 SVM 中引入核方法便可使得 SVM 变为非线性分类器,给定非线性可分数据集 ,如下图所示,此时找不到一个分类平面来将数据分开,核方法可以将数据投影到…

核函数与核方法整理

一些之前提到过的知识, 对核函数相关进行详细梳理和串联. 根据胡老师建议的重点, 学习了一下: 核函数公式,作用,选择, 调参, 如何简化运算 目录 SVM回顾 严格线性可分问题 近似线性可分 核函数 什么是核函数 如何使用核函数 为什么要用核函数 …

核方法也称为核技巧(Kernel method)

简介 核函数是干嘛的? 核方法的好处#套用ice110956的说法 1. 在线性与非线性间架起一座桥梁,低维空间里面数据特征是非线性的,没法儿用线性方法解决,当数据特征映射到高维的时候,可以用线性方法解决。 2. 通…

Kernel Method核方法—应用与理解

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

核方法学习

20201101 - 0. 引言 核方法(kernel methods,核函数、核技巧)是一种能够将在原始数据空间中的非线性数据转化到高维线性可分的方法。而最开始学习机器学习的时候,也是在SVM中接触到的。不过在那个时候之后,就很少从理…

核方法(kernel Method)

核方法 核方法定义 一种能够将在原始数据空间中的非线性数据映射到高维线性可分的方法。 核方法的用处 1、低维数据非线性,当其映射到高维空间(feature space)时,可以用线性方法对数据进行处理。 2、线性学习器相对于非线性学…

核方法概述----正定核以及核技巧(Gram矩阵推导正定核)

在再谈SVM(hard-margin和soft-margin详细推导、KKT条件、核技巧)中我们大致谈到了核函数以及为什么要用核函数,今天在这里更加详细的介绍一下。 核方法 1.核函数概述2.正定核2.1定义2.2证明 3.核技巧4.常见的核函数 1.核函数概述 从前面的学…

nginx编译器安装以及编译

一:nginx编译器安装 1:nginx编译器下载安装 http://nginx.org/download/nginx-1.23.1.tar.gz ----下载网址(nginx-1.23.1.tar.gz-示例版本) 2:将tar -zxvf nginx-1.23.1.tar.gz传入home目录下 mkdir /home/nginxchm…

mac编译安装Nginx

一、安装wget 使用homebrew安装wget brew install wget安装wget时报错 tar: Error opening archive: Failed to open /Users/xxx/Library/Caches/… 发现是install libunistring的时候失败报错; 单独安装此依赖; 安装成功,再继续安装wget&#xff1…

宝塔自定义html,宝塔面板Nginx编译安装添加自定义模块PageSpeed

我们在安装好宝塔的时候,首先要安装的都是nginx,PHP这些lnmp组合。估计很多童鞋选择的极速安装。确实,极速安装和编译安装在使用中,区别不大。但是,如果你想后期添加模块,极速安装就无法做到了,…

Linux中编译安装NGINX

1.去官网下载文件 nginx官网 nginx: downloadhttp://nginx.org/en/download.html?spma2c6h.12873639.0.0.222cda00jLs6QI 2.解决nginx安装中的各种依赖 GCC编译器:yum install gcc gcc-c正则表达式PCRE库:yum install -y pcre pcre-develzlib压缩库:yum install -y zlib z…

Centos7 编译安装Nginx

文章目录 前言一、编译安装nginx二、编译安装过程1.操作系统的选择,centos71.1关闭防火墙、selinux 2.安装编译开发环境2.1安装nginx所需的一些第三方系统库的支持 3.编译安装nginx3.1下载nginx源代码3.2解压缩nginx包,并进入该目录3.3开始编译安装3.4查…

Ubuntu 编译安装Nginx

文章目录 1. apt安装2. 编译安装2.1 启动Nginx 3. 防火墙问题 1. apt安装 # 默认版本安装 apt-get update apt-get install nginx# 选择版本安装 apt-get update apt-cache show nginx apt-get install nginx1.18.0-0ubuntu1.3# 启动 service nginx start# 重启 service nginx…