【自学笔记】支持向量机(2)——核函数

news2025/1/9 16:54:16

引入

  核函数的功能是将一组数据映射到更高维的特征空间,这样可以让在低维无法线性分类的数据能够在高维空间下被分类。
  可以证明,如果原始数据是有限的维度,那么一定存在一个高维特征空间使得样本线性可分。

  文章内容由《机器学习》相关内容,网络资源,GPT回答和个人理解组成。

回顾

支持向量机(1)
  在特征空间内划分超平面的模型可以表示为:

f ( x ) = w ⃗ T x ⃗ + b f(x)=\vec{w}^{T}\vec{x}+b f(x)=w Tx +b

  假如我们将特征向量 x x x以某种方式映射到了更高维的空间中,得到的新特征向量记作 ϕ ( x ⃗ ) \phi (\vec{x}) ϕ(x )。那新的模型可以表示为:

f ( x ) = w ⃗ T ϕ ( x ⃗ ) + b f(x)=\vec{w}^{T}\phi (\vec{x})+b f(x)=w Tϕ(x )+b

  于是我们可以改写支持向量机中的命题:

min ⁡ w ⃗ , b ∣ ∣ w ⃗ ∣ ∣ \min_{\vec{w}, b}||\vec{w}|| minw ,b∣∣w ∣∣

s.t. y i ( w ⃗ T ϕ ( x ⃗ i ) + b ) ≥ 1 , i = 1 , 2 , . . . , m y_{i}(\vec{w}^{T}\phi (\vec{x}_{i})+b) \ge 1, i=1,2,...,m yi(w Tϕ(x i)+b)1,i=1,2,...,m

  其对偶命题为:

    g ( α ⃗ ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) g(\vec{\alpha})=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}\phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) g(α )=i=1mαi21i=1mj=1mαiαjyiyjϕ(x i)Tϕ(x j)
   
    max ⁡ α ⃗ g ( α ⃗ ) \max _{\vec{\alpha}}g(\vec{\alpha}) maxα g(α )

s . t . s.t. s.t. α i ≥ 0 \alpha_{i} \ge 0 αi0,   ( i = 1 , . . . , m ) (i=1,...,m) (i=1,...,m)

    ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_{i}y_{i}=0 i=1mαiyi=0

核函数应用

   由于\phi (\vec{x})的维度可能很高,甚至可能无穷维,上式中的 ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) \phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) ϕ(x i)Tϕ(x j)可能并不好计算。于是我们设想这样一个函数(这被称为核技巧):

κ ( x ⃗ i , x ⃗ j ) = < ϕ ( x ⃗ i ) , ϕ ( x ⃗ j ) > = ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) \kappa (\vec{x}_{i},\vec{x}_{j})=<\phi(\vec{x}_{i}), \phi(\vec{x}_{j})>=\phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) κ(x i,x j)=<ϕ(x i),ϕ(x j)>=ϕ(x i)Tϕ(x j)

   这个函数的意义是我们直接研究 ϕ ( x ⃗ i ) \phi (\vec{x}_{i}) ϕ(x i) ϕ ( x ⃗ j ) \phi (\vec{x}_{j}) ϕ(x j)的内积,而不直接计算两者的具体值。于是问题转化为了:

    g ( α ⃗ ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j κ ( x ⃗ i , x ⃗ j ) g(\vec{\alpha})=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}\kappa (\vec{x}_{i},\vec{x}_{j}) g(α )=i=1mαi21i=1mj=1mαiαjyiyjκ(x i,x j)
   
    max ⁡ α ⃗ g ( α ⃗ ) \max _{\vec{\alpha}}g(\vec{\alpha}) maxα g(α )

s . t . s.t. s.t. α i ≥ 0 \alpha_{i} \ge 0 αi0,   ( i = 1 , . . . , m ) (i=1,...,m) (i=1,...,m)

    ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_{i}y_{i}=0 i=1mαiyi=0

   对于不同的 ϕ ( ⋅ ) \phi(\cdot ) ϕ(),显然对应着不同的 κ ( ⋅ , ⋅ ) \kappa (\cdot,\cdot) κ(,),选定合适的 ϕ ( ⋅ ) \phi(\cdot ) ϕ()后可以提前求出 κ ( ⋅ , ⋅ ) \kappa (\cdot,\cdot) κ(,),就可以减少计算量。
   基于上述求解后得到:

f ( x ) = w ⃗ T ϕ ( x ⃗ ) + b f(x)=\vec{w}^{T}\phi (\vec{x})+b f(x)=w Tϕ(x )+b
    = ∑ i = 1 m α i y i ϕ ( x ⃗ i ) T ϕ ( x ⃗ ) + b =\sum_{i=1}^{m}\alpha _{i}y_{i}\phi(\vec{x}_{i})^{T}\phi(\vec{x}) + b =i=1mαiyiϕ(x i)Tϕ(x )+b
    = ∑ i = 1 m α i y i κ ( x ⃗ , x ⃗ i ) =\sum_{i=1}^{m}\alpha _{i}y_{i}\kappa (\vec{x},\vec{x}_{i}) =i=1mαiyiκ(x ,x i)

这里 x ⃗ \vec{x} x 是测试数据点, x i x_{i} xi为每一个训练数据点

   上式显示出模型最优解可以通过训练样本的核函数展开,被称为支持向量展式

寻找核函数

  接下来就是确定一个合适的核函数。合适的核函数是否一定存在呢?什么样的函数适合作核函数呢?我们有以下定理:
在这里插入图片描述

  对称性很好理解,而半正定性则有以下原因:
在这里插入图片描述
  概括以下就是保持原有问题的凸性不变,维持束缚条件,保证参数的合理性和收敛性。(个人理解)

  需要注意的是,在不知道特征映射的形式时,我们是无法知道什么样的核函数是合适的。如果核函数选择不当,将会成为影响模型性能的最大变数。

  常用的核函数有:

名称表达式参数用途&补充
Linear Kernel(线性核函数) κ ( x ⃗ i , x ⃗ j ) = x ⃗ i T x ⃗ j \kappa (\vec{x}_{i},\vec{x}_{j})=\vec{x}_{i}^{T}\vec{x}_{j} κ(x i,x j)=x iTx j不进行任何映射,适用于线性可分的数据。
Polynomial Kernel(多项式核) κ ( x ⃗ i , x ⃗ j ) = ( x ⃗ i T x ⃗ j + c ) d \kappa (\vec{x}_{i},\vec{x}_{j})=(\vec{x}_{i}^{T}\vec{x}_{j}+c)^{d} κ(x i,x j)=(x iTx j+c)d d ≥ 1 d \ge 1 d1为多项式的次数用于捕捉数据的非线性关系。
Gaussian Kernel(高斯核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 2 σ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid ^{2}}{2\sigma ^{2}} ) κ(x i,x j)=exp(2σ2∣∣x ix j2) σ > 0 \sigma > 0 σ>0为高斯核的带宽控制数据点的局部影响。非常强大的非线性核函数,常用于复杂的分类和回归任务。
Laplacian Kernel(拉普拉斯核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ σ ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid }{\sigma} ) κ(x i,x j)=exp(σ∣∣x ix j∣∣) σ > 0 \sigma > 0 σ>0拉普拉斯核完全等价于指数核,唯一的区别在于前者对参数的敏感性降低,也是一种径向基核函数。
Exponential Kernel(指数核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 σ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid }{2\sigma^{2}} ) κ(x i,x j)=exp(2σ2∣∣x ix j∣∣) σ > 0 \sigma > 0 σ>0指数核函数就是高斯核函数的变种,它仅仅是将向量之间的L2距离调整为L1距离,这样改动会对参数的依赖性降低,但是适用范围相对狭窄。
Sigmoid Kernel(Sigmoid 核) κ ( x ⃗ i , x ⃗ j ) = t a n h ( β x ⃗ i T x ⃗ j + θ ) \kappa (\vec{x}_{i},\vec{x}_{j})=tanh(\beta\vec{x}_{i}^{T}\vec{x}_{j}+\theta) κ(x i,x j)=tanh(βx iTx j+θ) β > 0 \beta>0 β>0 θ < 0 \theta<0 θ<0这个核函数试图模仿神经网络中的Sigmoid激活函数,但在某些情况下可能不会产生半正定核矩阵。
Laplace核 κ ( x ⃗ i , x ⃗ j ) = e x p ( − γ ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\gamma\mid\mid\vec{x}_{i}-\vec{x}_{j}\mid\mid) κ(x i,x j)=exp(γ∣∣x ix j∣∣)与高斯核类似,但使用Laplace分布而非高斯分布。
ANOVA Kernel(方差分析内核) κ ( x ⃗ i , x ⃗ j ) = ∏ t = 1 n e x p ( − γ ( x i , t − x j , t ) 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=\prod_{t=1}^{n}exp(-\gamma(x_{i,t}-x_{j,t})^{2}) κ(x i,x j)=t=1nexp(γ(xi,txj,t)2)主要用于分析方差(ANOVA)问题
Wave Kernel(波形核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − 1 2 σ 2 s i n 2 ( π L ∣ x i − x j ∣ ) ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{1}{2\sigma ^{2}}sin^{2}(\frac{\pi }{L}\mid x_{i}-x_{j}\mid)) κ(x i,x j)=exp(2σ21sin2(Lπxixj)) σ > 0 \sigma >0 σ>0控制相似性衰减的速度, L L L
L 是周期长度适用于语音处理场景
Log Kernel(对数核) κ ( x ⃗ i , x ⃗ j ) = l o g ( 1 + γ ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=log(1+\gamma\mid\mid\vec{x}_{i}-\vec{x}_{j}\mid\mid^{2}) κ(x i,x j)=log(1+γ∣∣x ix j2)一般在图像分割上经常被使用

  一般根据经验,文本数据通常用线性核,情况不明时可以采用高斯核。

  我们还可以通过变形与组合已有核函数的方式来创造新的核函数,如:

  (1)若 κ 1 \kappa_{1} κ1 κ 2 \kappa_{2} κ2为核函数,则对任意正数 γ 1 , γ 2 \gamma_{1},\gamma_{2} γ1,γ2,其线性组合也是核函数。

γ 1 κ 1 + γ 2 κ 2 \gamma_{1}\kappa_{1}+\gamma_{2}\kappa_{2} γ1κ1+γ2κ2

  (2)若 κ 1 \kappa_{1} κ1 κ 2 \kappa_{2} κ2为核函数,则核函数的直积也为核函数。

κ 1 ⊗ κ 2 ( x ⃗ , z ⃗ ) = κ 1 ( x ⃗ , z ⃗ ) κ 2 ( x ⃗ , z ⃗ ) \kappa_{1}\otimes \kappa_{2}(\vec{x},\vec{z})=\kappa_{1}(\vec{x},\vec{z})\kappa_{2}(\vec{x},\vec{z}) κ1κ2(x ,z )=κ1(x ,z )κ2(x ,z )

  (3)若 κ 1 \kappa_{1} κ1为核函数,则对任意函数 g ( x ⃗ ) g(\vec{x}) g(x ),如下定义的 κ \kappa κ也是核函数。

κ ( x ⃗ , z ⃗ ) = g ( x ⃗ ) κ 1 ( x ⃗ , z ⃗ ) g ( z ⃗ ) \kappa(\vec{x},\vec{z})=g(\vec{x})\kappa_{1}(\vec{x},\vec{z})g(\vec{z}) κ(x ,z )=g(x )κ1(x ,z )g(z )

总结

  核函数的使用使得机器学习算法能够在复杂的特征空间中进行操作,而无需显式地计算该空间中的特征值,从而避免了“维度灾难”。核方法允许算法在高维空间中工作,同时保留了数据的原始维度,这在处理大量数据和高维数据集时非常有用。

  在实际应用中,选择合适的核函数对于模型的性能至关重要,这通常取决于问题的特性以及数据的分布和结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

地平线秋招2025

【地平线秋招】 中秋卷起来&#xff01;&#xff01;&#xff01; 内推码 kbrfck 内推码 kbrfck 内推码 kbrfck 投递链接&#xff1a;https://wecruit.hotjob.cn/SU62d915040dcad43c775ec12c/mc/position/campus?acotycoCodekbrfck&recruitType1&isLimitShowPostScope…

Ubantu和Centos7一键shell更换镜像源与Linux系统Python3环境安装

目录 前言 1.一键更换源 1.1 创建文件 1.2 向环境赋予可执行的权限 2.Linux系统配置Python3环境 2.1 查看当前python环境 2.2 更换源 2.3 安装所需的依赖 2.4.下载python环境文件 2.5.解压文件 2.6 进行编译 2.7 开始安装 2.8 设置软连接 2.9 测试是否安装成功…

苍穹外卖Day01-2

导入接口文档 yApi接口管理平台http://api.doc.jiyou-tech.com/ 创建项目 导入接口文件 导入结果界面 Swagger 介绍 使用Swagger你只需要按照它的规范去定义接口及接口相关的信息&#xff0c;就可以做到生成接口文档&#xff0c;以及在线接口调试页面。 官网&#xff1a;ht…

计算机人工智能前沿进展-大语言模型方向-2024-09-16

计算机人工智能前沿进展-大语言模型方向-2024-09-16 1. Securing Large Language Models: Addressing Bias, Misinformation, and Prompt Attacks B Peng, K Chen, M Li, P Feng, Z Bi, J Liu, Q Niu - arXiv preprint arXiv:2409.08087, 2024 保护大型语言模型&#xff1a;…

走进低代码表单开发(三):高效业务功能构建

前面我们已经介绍了勤研低代码开发平台的页面设计相关的内容&#xff0c;当页面设计完成后&#xff0c;我们将继续进行表单的功能开发&#xff0c;接下来&#xff0c;我们一起走进勤研低代码开发平台高效便捷的表单功能设计&#xff0c;来看看勤研低代码平台如何为用户带来全新…

MFC实现对话框与控件的自适应调节

一.对话框属性设置 先将对话框的Border属性由Dialog Frame设置为Resizing。 二.添加消息处理函数 类向导 -> 消息&#xff08;WM-SIZE&#xff09;添加处理函数->void COnshowDlg::OnSize(UINT nType, int cx, int cy)。 三.添加代码 在.h文件中声明&#xff1a; vo…

每日一题——第九十九题

// PrintUniqueChart.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。 // // 设计算法&#xff0c;打印如下图案&#xff1a; #include<stdio.h>int main() {int i, j;for (i 0; i < 5; i){//每行开始先打印空格//控制每行前的空格for (int space 0…

gitee远程仓库OPEN GIT BASH HERE从错误中学习

推荐一个ai软件&#xff08;搜索器搜索kimi&#xff09;&#xff0c;是一个ai&#xff0c;有什么错误跟着一步步解决就可以了 当你创建一个仓库 会出现这些 打开这个窗口跟着敲就行了 到这里为止我还没出现错误&#xff0c;后面我把remote add添加远程仓库的地址输错地址了 所…

网络安全-ssrf

目录 一、环境 二、漏洞讲解 三、靶场讲解 四、可利用协议 4.1 dict协议 4.2 file协议 4.3 gopher协议 五、看一道ctf题吧&#xff08;长亭的比赛&#xff09; 5.1环境 5.2开始测试 ​编辑 一、环境 pikachu&#xff0c;这里我直接docker拉取的&#xff0c;我只写原…

【H2O2|全栈】关于CSS(5)如何制作一个搜索网页的首页?

目录 CSS基础知识 前言 准备工作 简单网页的组成部分 案例 浏览器的窗口大小 划分主要部分 固定定位 头部导航&#xff08;左侧&#xff09; 头部导航&#xff08;右侧&#xff09; LOGO ​编辑搜索框 热搜标题 热搜内容 文字简介 资源 预告和回顾 后话 CSS…

孙怡带你深度学习(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader&#xff08;数据加载器&#xff09;4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…

Visual Studio 2019/2022 IntelliCode(AI辅助IntelliSense)功能介绍

IntelliCode 不知在多久以前&#xff0c;我装上了Visual Studio 2019&#xff0c;写代码时&#xff0c;就注意到了下面这样的东西&#xff1a;带五角星的提示。 这个带五角星的提示功能叫做IntelliCode。 我们知道Visual Studio 有个强大的功能叫做Intellisense(智能感知)&am…

【Linux系统编程】信号的保存与处理

目录 一&#xff0c;信号的保存 1-1&#xff0c;core与Term终止信号 1-2&#xff0c;进程退出与信号的关系 1-3&#xff0c;信号在内核中的表示 1-4&#xff0c;信号操作函数 二&#xff0c;信号的处理 2-1&#xff0c;信号被处理的时期 2-2&#xff0c;内核实现信号的…

马匹行为识别系统源码分享

马匹行为识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

C++ Primer Plus(速记版)-高级主题

第十七章 用于大型程序的工具 C 解决问题规模多样&#xff0c;对复杂问题尤其需用异常处理、命名空间和多重继承增强代码管理、库整合和概念表达&#xff0c;以适应大规模编程对错误处理、模块组合及高级功能设计的高要求。 17.1. 异常处理 异常处理允许C程序中不同部分通过抛…

解决Tez报错问题

在启动hive的时候&#xff0c;发现该报错 1、检测HADOOP_PATH环境变量 echo $HADOOP_CLASSPATH 如果没有输出&#xff0c;说明我们的配置文件没有生效&#xff0c;这时候需要重写source一下 2、刷新配置文件生效 source /etc/profile 有输出&#xff0c;环境生效 3、再次运…

Matlab simulink建模与仿真 第十八章(Stateflow状态机)

参考视频&#xff1a;Simulink/stateflow的入门培训_哔哩哔哩_bilibili 一、概述 Stateflow是集成于Simulink中的图形化设计与开发工具&#xff0c;主要用于针对控制系统中的复杂控制逻辑进行建模与仿真&#xff0c;或者说&#xff0c;Stateflow适用于针对事件响应系统进行建模…

Java项目实战II基于Java+Spring Boot+MySQL的校园社团信息管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今高校…

DSC+DW实时+异步搭建部署

DSCDW实时异步搭建部署 实例及IP规划 配置 DMDSC实时备机配置 dmarch.ini--DSC节点1--DSC节点2 配置 dm.ini 配置实时备库&#xff08;实时备库上执行&#xff09;--初始化备库在DCS1执行&#xff0c;将备份文件上传到实时备机在实时备库执行还原 配置 dm.ini1.DSC节点1配置 dm…

PyCharm 安装教程

传送门 PyCharm 是一款由 JetBrains 开发的强大的 Python 集成开发环境&#xff08;IDE&#xff09;。它支持多种功能&#xff0c;包括调试、代码补全、智能代码分析、版本控制集成等&#xff0c;特别适合开发 Python 项目。接下来&#xff0c;我们将详细介绍如何在不同操作系…