SVM 核函数

4、核函数:
在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优分离超平面,从而把平面上本身不好分的非线性数据分开。
在这里插入图片描述
而在我们遇到核函数之前,如果用原始的方法,那么在用线性学习器学习一个非线性关系,需要选择一个非线性特征集,并且将数据写成新的表达形式,这等价于应用一个固定的非线性映射,将数据映射到特征空间,在特征空间中使用线性学习器,因此,考虑的假设集是这种类型的函数:
在这里插入图片描述
这里ϕ:X->F是从输入空间到某个特征空间的映射,这意味着建立非线性学习器分为两步:
首先使用一个非线性映射将数据变换到一个特征空间F,
然后在特征空间使用线性学习器分类。
核函数:如何处理非线性数据

来看个核函数的例子。如下图所示的两类数据,分别分布为两个圆圈的形状,这样的数据本身就是线性不可分的,此时咱们该如何把这两类数据分开呢(下文将会有一个相应的三维空间图)?
在这里插入图片描述
事实上,上图所述的这个数据集,是用两个半径不同的圆圈加上了少量的噪音生成得到的,所以,一个理想的分界应该是一个“圆圈”而不是一条线(超平面)。如果用 和 来表示这个二维平面的两个坐标的话,我们知道一条二次曲线(圆圈是二次曲线的一种特殊情况)的方程可以写作这样的形式:
在这里插入图片描述
注意上面的形式,如果我们构造另外一个五维的空间,其中五个坐标的值分别为 , , , , ,那么显然,上面的方程在新的坐标系下可以写作:
在这里插入图片描述
关于新的坐标 ,这正是一个 hyper plane 的方程!也就是说,如果我们做一个映射 ,将 按照上面的规则映射为 ,那么在新的空间中原来的数据将变成线性可分的,从而使用之前我们推导的线性分类算法就可以进行处理了。这正是Kernel 方法处理非线性问题的基本思想。
因此我只需要把它映射到 , , 这样一个三维空间中即可,下图即是映射之后的结果,将坐标轴经过适当的旋转,就可以很明显地看出,数据是可以通过一个平面来分开的
在这里插入图片描述
核函数相当于把原来的分类函数 映射成:
在这里插入图片描述
而其中的 在这里插入图片描述可以通过求解如下 dual 问题而得到的:
在这里插入图片描述
但这样做的计算量是巨大的:
在这里插入图片描述

设两个向量
在这里插入图片描述在这里插入图片描述
映射之后的内积:
在这里插入图片描述
在这里插入图片描述
二者有很多相似的地方,实际上,我们只要把某几个维度线性缩放一下,然后再加上一个常数维度,具体来说,上面这个式子的计算结果实际上和映射之后的内积是相等的。
计算两个向量在隐式映射过后的空间中的内积的函数叫做核函数
在这里插入图片描述
核函数能简化映射空间中的内积运算——刚好“碰巧”的是,在我们的 SVM 里需要计算的地方数据向量总是以内积的形式出现的

计算实例;

1、先映射再内积,计算复杂度为O(n2)
2、先内积,再映射(结果一样):直接应用低维运算的结果,并没有进行映射到高维,再在高维进行运算的过程。复杂度为O(n)
在这里插入图片描述

核函数:

高斯核

在这里插入图片描述
高斯核会将原始空间映射为无穷维空间。不过,如果在这里插入图片描述选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果在这里插入图片描述选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控在这里插入图片描述参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。下图所示的例子便是把低维线性不可分的数据通过高斯核函数映射到了高维空间。

线性核

在这里插入图片描述
这实际上就是原始空间中的内积。这个核存在的主要目的是使得“映射后空间中的问题”和“映射前空间中的问题”两者在形式上统一起来了(意思是说,咱们有的时候,写代码,或写公式的时候,只要写个模板或通用表达式,然后再代入不同的核,便可以了,于此,便在形式上统一了起来,不用再分别写一个线性的,和一个非线性的)。

在选取核函数解决实际问题时,通常采用的方法有:一是利用专家的先验知识预先选定核函数;二是采用Cross-Validation方法,即在进行核函数选取时,分别试用不同的核函数,归纳误差最小的核函数就是最好的核函数.如针对傅立叶核、RBF核,结合信号处理问题中的函数回归问题,通过仿真实验,对比分析了在相同数据条件下,采用傅立叶核的SVM要比采用RBF核的SVM误差小很多。

链接:https://www.jianshu.com/p/4a4e52e98e84

1). Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
2). RBF核(高斯核):主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。我个人的体会是:使用libsvm,默认参数,RBF核比Linear核效果稍差。通过进行大量参数的尝试,一般能找到比linear核更好的效果。

gamma值:决定模型的复杂程度,值越大,会产生过拟合,值越小,越平稳,泛化能力强
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中,支持向量机(SVM)的核函数有多种选择。其中最常用的核函数有线性核函数、多项式核函数、高斯径向基核函数(RBF核函数)和Sigmoid核函数。以下是这些核函数的定义和用法说明: 1. 线性核函数: 在Matlab中,线性核函数可以通过设置SVM模型的'KernelFunction'参数为'linear'来使用。线性核函数的表达式为K(x, y) = x * y',其中x和y表示输入样本。 2. 多项式核函数: 在Matlab中,多项式核函数可以通过设置SVM模型的'KernelFunction'参数为'polynomial'来使用。多项式核函数的表达式为K(x, y) = (coef0 + x * y')^d,其中coef0表示偏置系数,d表示多项式的阶数。 3. 高斯径向基核函数(RBF核函数): 在Matlab中,高斯径向基核函数可以通过设置SVM模型的'KernelFunction'参数为'rbf'来使用。高斯径向基核函数的表达式为K(x, y) = exp(-gamma * ||x - y||^2),其中gamma表示核函数的宽度。 4. Sigmoid核函数: 在Matlab中,Sigmoid核函数可以通过设置SVM模型的'KernelFunction'参数为'sigmoid'来使用。Sigmoid核函数的表达式为K(x, y) = tanh(beta*x*y' + coef0),其中beta和coef0为参数。 以上是Matlab中常用的SVM核函数的使用方法和表达式。根据具体的问题和数据特点,选择合适的核函数和参数可以影响SVM分类的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SVM分类核函数及参数选择比较.pdf](https://blog.csdn.net/weixin_30224231/article/details/116146626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值