机器学习13——支持向量机下

支持向量机下

非线性支持向量机(Non-linear SVMs)详解

核心思想

当数据在原始空间线性不可分时,通过**核技巧(Kernel Trick)**将数据映射到高维特征空间,使其在该空间中线性可分。

比如以下的样本在一维空间不可分,但是映射到二维空间变得线性可分:
在这里插入图片描述

关键步骤
  • 特征映射(Feature Mapping)
    定义映射函数 ϕ:Rd→RD\phi: \mathbb{R}^d \to \mathbb{R}^Dϕ:RdRDD≫dD \gg dDd),将原始特征 x\mathbf{x}x 映射到高维空间 ϕ(x)\phi(\mathbf{x})ϕ(x)

  • 映射后,分类器函数变成了:
    g(x)=wTϕ(x)+b=∑xi∈SVλiyiϕ(xi)ϕ(x)+b g(x)=w^T \phi(x)+b=\sum_{x_i \in S V} \lambda_i y_i \phi\left(x_i\right) \phi(x)+b g(x)=wTϕ(x)+b=xiSVλiyiϕ(xi)ϕ(x)+b

  • 但是我们其实并不需要找到这个映射函数,然后将样本映射到高维空间后做内积!!我们可以用一个Kernel Trick:

    • 核函数(Kernel Function)
      直接计算高维空间的内积,避免显式映射。也就是我们可以在样本空间(原空间维度)下计算高维下样本的内积结果:
      K(xi,xj)=ϕ(xi)Tϕ(xj) K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^T \phi(\mathbf{x}_j) K(xi,xj)=ϕ(xi)Tϕ(xj)

    • 示例:

      • 一个二维空间样本:x=[x1x2];\mathrm{x}=\left[\begin{array}{ll}x_1 & x_2\end{array}\right] ;x=[x1x2];

      • 让核函数K(xi,xj)=(1+xiTxj)2K\left(\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{j}}\right)=\left(1+\mathrm{x}_{\mathrm{i}}^{\mathrm{T}} \mathrm{x}_{\mathrm{j}}\right)^2K(xi,xj)=(1+xiTxj)2,即K(xi,xj)=φ(xi)Tφ(xj)K\left(\mathrm{x}_{\mathrm{i}}, \mathrm{x}_{\mathrm{j}}\right)=\varphi\left(\mathrm{x}_{\mathrm{i}}\right)^{\mathrm{T}} \varphi\left(\mathrm{x}_{\mathrm{j}}\right)K(xi,xj)=φ(xi)Tφ(xj)

      • 我们有:
        K(Xi,Xj)=(1+Xi⊤Xj)2=1+Xi12Xj12+2Xi1Xj1Xi2Xj2+Xi22Xj22+2Xi1Xj1+2Xi2Xj2=[1Xi122Xi1Xi2Xi222Xi12Xi2][1Xj122Xj1Xj2Xj222Xj12Xj2]⊤=φ(Xi)⊤φ(Xj),where φ(X)=[1X122X1X2X222X12X2]⊤ \begin{aligned} K\left(X_i, X_j\right) &= \left(1 + X_i^{\top} X_j \right)^2 \\ &= 1 + X_{i1}^2 X_{j1}^2 + 2 X_{i1} X_{j1} X_{i2} X_{j2} + X_{i2}^2 X_{j2}^2 + 2 X_{i1} X_{j1} + 2 X_{i2} X_{j2} \\ &= \left[ \begin{array}{llll} 1 & X_{i1}^2 & \sqrt{2} X_{i1} X_{i2} & X_{i2}^2 & \sqrt{2} X_{i1} & \sqrt{2} X_{i2} \end{array} \right] \left[ \begin{array}{llll} 1 & X_{j1}^2 & \sqrt{2} X_{j1} X_{j2} & X_{j2}^2 & \sqrt{2} X_{j1} & \sqrt{2} X_{j2} \end{array} \right]^{\top} \\ &= \varphi\left(X_i\right)^{\top} \varphi\left(X_j\right), \quad \text{where } \varphi(X) = \left[ \begin{array}{llllll} 1 & X_1^2 & \sqrt{2} X_1 X_2 & X_2^2 & \sqrt{2} X_1 & \sqrt{2} X_2 \end{array} \right]^{\top} \end{aligned} K(Xi,Xj)=(1+XiXj)2=1+Xi12Xj12+2Xi1Xj1Xi2Xj2+Xi22Xj22+2Xi1Xj1+2Xi2Xj2=[1Xi122Xi1Xi2Xi222Xi12Xi2][1Xj122Xj1Xj2Xj222Xj12Xj2]=φ(Xi)φ(Xj),where φ(X)=[1X122X1X2X222X12X2]

    • 常用核函数

      • 线性核K(xi,xj)=xiTxjK(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^T \mathbf{x}_jK(xi,xj)=xiTxj
      • 多项式核K(xi,xj)=(1+xiTxj)pK(\mathbf{x}_i, \mathbf{x}_j) = (1 + \mathbf{x}_i^T \mathbf{x}_j)^pK(xi,xj)=(1+xiTxj)p
      • 高斯核(RBF)K(xi,xj)=exp⁡(−∥xi−xj∥22σ2)K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\frac{\|\mathbf{x}_i - \mathbf{x}_j\|^2}{2\sigma^2}\right)K(xi,xj)=exp(2σ2xixj2)
      • Sigmoid核K(xi,xj)=tanh⁡(β0xiTxj+β1)K(\mathbf{x}_i, \mathbf{x}_j) = \tanh(\beta_0 \mathbf{x}_i^T \mathbf{x}_j + \beta_1)K(xi,xj)=tanh(β0xiTxj+β1)
  • 对偶问题优化
    使用核函数替换内积,对偶问题变为:
    max⁡λ∑i=1nλi−12∑i,j=1nλiλjyiyjK(xi,xj)s.t.0≤λi≤C,∑i=1nλiyi=0 \begin{aligned} \max_{\lambda} \quad & \sum_{i=1}^n \lambda_i - \frac{1}{2} \sum_{i,j=1}^n \lambda_i \lambda_j y_i y_j K(\mathbf{x}_i, \mathbf{x}_j) \\ \text{s.t.} \quad & 0 \leq \lambda_i \leq C, \quad \sum_{i=1}^n \lambda_i y_i = 0 \end{aligned} λmaxs.t.i=1nλi21i,j=1nλiλjyiyjK(xi,xj)0λiC,i=1nλiyi=0
    求解后得到判别函数:
    g(x)=∑xi∈SVλiyiK(x,xi)+b g(\mathbf{x}) = \sum_{\mathbf{x}_i \in SV} \lambda_i y_i K(\mathbf{x}, \mathbf{x}_i) + b g(x)=xiSVλiyiK(x,xi)+b
    其中偏移项 bbb 通过支持向量计算:
    b=yk−∑xi∈SVλiyiK(xi,xk),0<λk<C b = y_k - \sum_{\mathbf{x}_i \in SV} \lambda_i y_i K(\mathbf{x}_i, \mathbf{x}_k), \quad 0 < \lambda_k < C b=ykxiSVλiyiK(xi,xk),0<λk<C

  • 算法流程:

    1. 选择核函数
    2. 选择一个C的值
    3. 求解二次规划问题,得到 λi\lambda_iλibbb
    4. 从支持向量构造分类函数
Other issues(使用 SVM 时需要注意的问题)
  1. Choice of kernel(核函数的选择)
  • 在 SVM 中,核函数(kernel function)是关键,它定义了如何将数据从输入空间映射到高维特征空间。
  • 常见的默认核函数是:
    • 高斯核(Gaussian kernel / RBF kernel)
    • 多项式核(Polynomial kernel)
  • 这些核函数在很多通用任务上效果不错,但:
    • 如果效果不佳,就需要更复杂的核函数(例如:字符串核、图核、语义核等),这时候可以结合具体任务设计。
  1. Domain experts can help formulate appropriate similarity measures
  • 专业领域的知识可以帮助设计适合该任务的相似性度量方式,也就是定制核函数;
  • 例如在生物信息学、图像识别等任务中,专家可以帮助构建更合适的核函数结构。
  1. Choice of kernel parameters(核函数参数的选择)
  • 以高斯核为例,其形式是:
    K(xi,xj)=exp⁡(−∥xi−xj∥22σ2) K(x_i, x_j) = \exp\left(-\frac{\|x_i - x_j\|^2}{2\sigma^2}\right) K(xi,xj)=exp(2σ2xixj2)
    其中:

    • σ\sigmaσ 控制核的“宽度”,即数据点之间多远才被认为是“相似”的。
    • 有经验规则认为:σ\sigmaσ 可设为“类别不同的最近样本点之间的距离”。
  • 在缺乏理论依据时,常用:

    • 验证集(validation set)
    • 交叉验证(cross-validation)
      来选择最优参数。
  1. Optimization criterion - Hard margin vs. Soft margin(优化标准)
  • Hard margin SVM
    • 要求所有样本完全分开(间隔大,零误差),适用于数据线性可分的情况;
  • Soft margin SVM
    • 允许一定的分类错误,引入松弛变量,更适用于现实世界中不可分的数据;
  • 实际应用中常常需要:
    • 通过大量试验调整不同参数来选择最优设置,比如 C 值(正则化参数)、核函数和其参数等。
Comparison with Neural Networks(与神经网络的比较)
特性神经网络(Neural Networks)支持向量机(SVM)
特征映射隐藏层将数据映射到低维空间(逐层抽象)核函数将数据映射到高维空间(甚至无限维)
搜索空间存在多个局部最小值(非凸优化)唯一全局最小值(凸优化问题)
训练效率训练成本高(梯度下降迭代,需调网络结构)训练效率高(凸优化,理论保证)
分类效率分类效率高(一次前向传播)分类效率也高(通过支持向量计算)
模型参数需要选择隐藏单元数和层数(模型复杂)只需选择核函数和 C(简洁)
泛化性能在典型任务中表现良好同样在多数任务中表现优越,且对噪声更鲁棒

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

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

相关文章

GPT-4和Claude哪个好

选择GPT-4还是Claude?这就像在问“苹果还是橙子哪个更好”——‌答案完全取决于你的具体需求‌。两者都是顶尖大语言模型,但各有特色。 我为你做了详细对比,帮你快速定位哪个更适合你: 🧠 核心能力对比 特性GPT-4 (OpenAI)Claude (Anthropic)‌语言理解/推理‌顶尖水平,…

RHCE考试 ——笔记

RHCE模拟测试exam_start ehcerht-vmctl start all考前说明• 请勿更改 IP 地址。DNS 解析完整主机名&#xff0c;同时也解析短名称。• 所有系统的 root 密码都是 redhat• Ansible 控制节点上已创建用户账户 devops。可以使用 ssh 访问• 所需的所有镜像保存在镜像仓库 utilit…

信创 CDC 实战 | TiDB 实时入仓难点与解决方案解析(以 ClickHouse 为例)

国产数据库加速进入核心系统&#xff0c;传统同步工具却频频“掉链子”。本系列文章聚焦 OceanBase、GaussDB、TDSQL、达梦等主流信创数据库&#xff0c;逐一拆解其日志机制与同步难点&#xff0c;结合 TapData 的实践经验&#xff0c;系统讲解从 CDC 捕获到实时入仓&#xff0…

Linux修炼:自动化构建make/Makefile

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《C修炼之路》、《Linux修炼&#xff1a;终端之内 洞悉真理…

GaussDB 分布式部署下创建表方法

1、问题现象 分布式集群采用水平分表的方式,将业务数据表的元组/行打散存储到各个节点内。 2、技术背景 通过全并行数据处理技术和快速定位到数据存储位置等手段可极大提升数据库性能,GaussDB分布式部署下可以创建俩种类型表,在做实际业务系统开发时根据业务场景创建不同表。…

Padavan路由器设置DNSmasq的DHCP Option

是下文的拓展&#xff1a;由于更换路由器为Padavan&#xff0c;需要配置DHCP option才能使得AC能够纳管AP 爱快路由器下水星&#xff08;Mercury&#xff09;无线管理器AC跨三层发现AP_爱快管理第三方ap-CSDN博客 DNSmasq全部配置请参考&#xff1a;Man page of DNSMASQ dhcp-…

Ubuntu 22.04 Server 虚拟机初始化配置与优化指南

✅ Ubuntu 22.04 本地/通用服务器初始化配置清单 1. 设置时区 sudo timedatectl set-timezone Asia/Shanghai2. 防火墙配置&#xff08;UFW&#xff09; sudo ufw enable sudo ufw default deny # 可选放通SSH或其他端口 sudo ufw allow 22/tcp # 查看状态 sudo ufw status # 禁…

如何在服务器上运行一个github项目

一、事情的缘起 今天一个朋友向我推荐了小红书上的一个视频&#xff0c;我看了一下这是一个在演示TypeWords项目的视频。这个项目是Github上采用vue来编写的一个开源项目。我进入该项目后看到了给出的样例网址2study.top&#xff0c;然后到上面看了一下。我发现这是一个通过打…

7.14 Java基础|String 和StringBuilder

补充注意&#xff1a;1、StringBuilder 的 append 方法可以接收整数类型的参数&#xff0c;并将其自动转换为字符串后添加到 StringBuilder 中2、该方法适用于所有基本数据类型&#xff08;如 long、double 等&#xff09;和对象&#xff08;通过调用其 toString() 方法&#x…

React 第六十九节 Router中renderMatches的使用详解及注意事项

前言 renderMatches 是 React Router 的一个高级实用函数&#xff0c;用于根据路由匹配结果渲染对应的组件树。它提供了对路由渲染过程的底层控制能力&#xff0c;特别适用于自定义路由渲染逻辑的场景。 一、基本概念和功能 renderMatches 函数的作用是将路由匹配结果转换为 Re…

esp8266-01S实现PPM波形

esp8266-01虽然小众&#xff0c;但是功能可不能少。因航模需要让ESP8266-01生成PPM波形。#include <ESP8266WiFi.h> #include <Ticker.h> // 仅用于延时函数替代#define PPM_PIN 2 // 使用 GPIO2 (需断开串口上传时的连接) #define CHANNELS 4 // PPM通道数量…

使用 pytest 测试框架构建自动化测试套件之一

pytest 是一个非常灵活且强大的测试框架&#xff0c;它支持简单的单元测试到复杂的功能测试。显著特点是其简洁的语法&#xff0c;可以无需继承 TestCase 类直接使用函数来编写测试用例&#xff0c;并通过 assert语句 进行断言。还支持参数化测试、丰富的插件系统。 pytest自动…

nacos docker 配置

docker.io/nacos 项目中国可用镜像列表 | 高速可靠的 Docker 镜像资源 1、Docker 拉取镜像 docker pull nacos/nacos-server:v2.1.0 2、创建宿主机挂载目录 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ AI写代码 3、启动nacos并复制文件到宿主机&#xff0…

Django 模板(Template)

1. 模板简介 作为 Web 开发框架,Django 提供了模板,可以很便利的动态生成 HTML。模版系统致力于表达外观,而不是程序逻辑。 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。 模板包含: HTM…

Word 文字编辑状态下按回车换行后是非正文格式

在Word里编辑时&#xff0c;按回车后新段落突然变成标题1、标题2这类格式&#xff0c;不再是正文样式&#xff0c;这通常是因为「正文」的样式设置出了问题——可能被默认设置成“后续段落自动应用标题1/标题2格式”了。 修改方法很简单&#xff1a; 找到并打开「正文」样式的修…

PySide6 UI 灵活性:QToolBar 的浮动与停靠及 QSplitter 的可调整面板

PySide6 UI 灵活性&#xff1a;QToolBar 的浮动与停靠及 QSplitter 的可调整面板 在现代桌面应用程序开发中&#xff0c;提供灵活且用户友好的界面至关重要。PySide6&#xff08;Qt for Python&#xff09;提供了强大的工具来构建这样的界面。本文将深入探讨两个关键的 PySide6…

B4016 树的直径

B4016 树的直径 - 洛谷 题目描述 给定一棵 n 个结点的树&#xff0c;树没有边权。请求出树的直径是多少&#xff0c;即树上最长的不重复经过一个点的路径长度是多少。 输入格式 第一行输入一个正整数 n&#xff0c;表示结点个数。 第二行开始&#xff0c;往下一共 n - 1 行…

【一维 前缀和+差分】

一、一维前缀和 1.1 定义 给定一个数组 a[1..n]&#xff0c;其前缀和数组 pre[1..n] 定义为&#xff1a; pre[i]a[1]a[2]⋯a[i] pre[i] a[1] a[2] \dots a[i] pre[i]a[1]a[2]⋯a[i] 即 pre[i] 表示原数组从第 1 项到第 i 项的和。 1.2 构建 int a[N], pre[N]; for (int i …

Spring Boot 双数据源配置

文章目录什么是双数据源&#xff1f;为什么需要双数据源&#xff1f;核心实现原理完整示例注意什么是双数据源&#xff1f; 双数据源是指在一个应用程序中同时配置和使用两个不同的数据库连接。比如&#xff1a; 一个连接订单数据库&#xff0c;处理业务数据一个连接用户中心…

【Java】【力扣】102.二叉树层序遍历

思路一个辅助队列&#xff08;初始化队列&#xff1a;根节点入队&#xff09;一个节点 出队&#xff0c;他的左右孩子入队循环 直到队列为空举例代码public List<List<Integer>> levelOrder(TreeNode root) {if (rootnull){return new ArrayList<List<Intege…