支持向量机算法(一):像讲故事一样讲明白它的原理及实现奥秘

1、支持向量机算法介绍

支持向量机(Support Vector Machine,SVM)是一种基于统计学习理论的模式识别方法, 属于有监督学习模型,主要用于解决数据分类问题。SVM将每个样本数据表示为空间中的点,使不同类别的样本点尽可能明显地区分开。通过将样本的向量映射到高维空间中,寻找最优区分两类数据的超平面,使各分类到超平面的距离最大化,距离越大表示SVM的分类误差越小。通常SVM用于二元分类问题,对于多元分类可将其分解为多个二元分类问题,再进行分类,主要的应用场景有图像分类、文本分类、面部识别、垃圾邮件检测等领域。

☀关于支持向量机的理解,有3个问题,请进一步解释。

☀(1)空间中的点,这个空间是什么?

在支持向量机(SVM)的语境中,这个“空间”是特征空间。假设我们有一个数据集,每个样本有多个特征。例如,在一个简单的二维数据集(如判断一个水果是苹果还是橙子),我们可能有两个特征:水果的大小和颜色深浅。如果把水果的大小作为x轴,颜色深浅作为y轴,那么每个水果样本就可以用这个二维平面(空间)中的一个点来表示。
当有更多的特征时,比如再加上水果的甜度、硬度等特征,这个空间就会变成三维、四维甚至更高维度。这个空间的维度取决于数据集中样本的特征数量。一般来说,空间中的每个维度对应着一个特征,这样就可以通过这些维度来定位样本在这个空间中的位置,也就是用空间中的点来表示样本数据。

☀(2)怎么将样本的向量映射到高维空间中,高维空间是什么?

①高维空间的概念:高维空间是相对于我们日常所熟悉的二维或三维空间而言的。在SVM中,高维空间是一个数学抽象概念。以一个简单的例子来说明,如果我们在二维平面中有一些线性不可分的数据,比如一个圆内的点属于一类,圆外的点属于另一类。在二维空间中,很难找到一个直线(超平面)来划分这两类数据。但是如果我们把这些数据映射到三维空间,通过一个合适的函数(比如),在三维空间中这些数据可能就变得线性可分了。高维空间就是具有更多维度的空间,其维度数量取决于我们使用的映射函数和数据的特性。
②映射方法:通常使用核函数(Kernel Function)来将样本向量映射到高维空间。常见的核函数有线性核函数、多项式核函数、高斯径向基核函数(RBF)等。对于线性核函数,它在一定程度上可以看作是一种简单的映射,在某些线性可分的数据情况下可以很好地工作。而对于高斯径向基核函数,它能够将数据映射到一个无穷维的空间。这个函数通过计算两个样本点之间的距离,将其转换为一个新的表示形式,从而实现了从低维空间到高维空间(这里是无穷维)的映射。

☀(3)什么是超平面,如何寻找 ?

超平面的概念:在二维空间中,超平面是一条直线,它可以将平面分成两个部分。例如,对于一个简单的二元分类问题,在平面上的直线就是一个超平面,直线一侧的点可以被归为一类,另一侧的点归为另一类。在三维空间中,超平面是一个平面,如。一般地,在维空间中,超平面是一个维的子空间。它的方程可以写成,其中是权重向量,是样本向量,是偏置项。
寻找超平面的方法:SVM的目标是找到一个最优的超平面,使得两类数据之间的间隔(Margin)最大化。这个间隔是指从超平面到最近的样本点(支持向量)的距离。通过求解一个优化问题来找到这个超平面。具体来说,我们要最小化,同时满足约束条件。这个优化问题可以通过一些优化算法,如序列最小优化(Sequential Minimal Optimization,SMO)算法来求解,从而得到最优的超平面。

2、支持向量机算法实现

支持向量机模型由简单到复杂分为以下三种:

线性可分支持向量机(Linear Support Vector Machine In Linearly Separable Case),有一些苹果和橙子,把它们的大小、颜色深浅当作特征,在二维平面上,能找到一条直线将苹果和橙子完全分开,每个水果都能精准归类,这就是线性可分,这条直线就是分类超平面,此为硬间隔最大化,这便是线性可分支持向量机的作用。

线性支持向量机(Linear Support Vector machine),有一堆水果,多数苹果和橙子能用一条直线大致分开,但有几个坏果混在对面堆里。这时引入松弛因子,允许少量分错,找到一条尽量分对多数水果的直线,实现软间隔最大化,得到的就是线性支持向量机,应对近似线性可分样本。

③非线性支持向量机(Non-Linear Support Vector Machine),看一群形状各异的云朵和飞鸟,在平面上画直线根本分不开。利用核技术,将它们 “变” 到高维空间,在那可能云朵聚一堆、飞鸟聚一堆,再用软间隔最大化找到个曲面分开它们,这就是非线性支持向量机,处理非线性可分样本。

在实际应用中很少有线性问题,支持向量机模型应用最多的是第三种模型。然而,复杂模型是简单模型的改进,而且通过核函数映射就能将低维的非线性问题转化为高维空间的线性问题。

(1)线性可分支持向量机

首先假设有两分类数据,如下图所示。

现在要找出一条最佳的分割线,将两类数据分隔开。对于线性可分两分类数据,支持向量机就是条直线,对于高维数据点就是一个超平面,下图所示的三条直线都可以将上图中的两类数据分开。 

除了a、b、c外还有无数条分割线,那么,在这些分割线中哪条是最完美的呢?目标是选择一条具有较强分类能力的直线,即较稳定的分类结果和较强的抗噪声能力。

假如在上图中又增加了一些数据,如下图所示。

由于新增了样本数据,相对于直线b而言,直线a与c对样本变化的适应性变差,使用直线a进行分类,标记的圆形点会被分到三角形中,使用直线c进行分类,标记的三角形点会被分到圆形中。 如何找到最优分类数据的分割线,使得具有最优的数据分类能力呢?这条分界线要尽可能地远离两类数据点,即数据集的边缘点到分界线的距离d最大,这里虚线穿过的边缘点就叫作支持向量,分类间隔2d,如下图所示。

(下图中,虚线共穿过了3个点,那么共有3个支持向量)

这里的数据点到超平面的距离就是间隔(margin),当间隔越大,这条分割线(分类器)也就越健壮,当有新的数据点的时候,使用这条分割线得到的分类结果也就越可信。

假设b为最优分割线,那么此分割线方程为: 

转化成向量形式:

只是在二维形式上的表示,如果扩展到n维,那么将变成:

 ①x代表样本的特征向量,n表示特征的数量,不同的应用场景下特征的数量和具体内容会有所不同。

②w代表权重向量,这些权重值反映了各个特征在分类决策中的重要程度。

③γ是偏置项,用于调整超平面的位置,使得超平面能够更好地对不同类别的样本进行分类。

可以将超平面方程写成更一般的表达形式: 

 本次线性可分支持向量机的内容已讲解完毕,下次继续支持向量机知识点的讲解。

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

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

相关文章

数据结构与算法之二叉树: LeetCode 108. 将有序数组转换为二叉搜索树 (Ts版)

将有序数组转换为二叉搜索树 https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述 给你一个整数数组 nums ,其中元素已经按 升序 排列请你将其转换为一棵 平衡 二叉搜索树 示例 1 输入:nums [-10,-3,0,5,9…

【博主推荐】 Microi吾码开源低代码平台,快速建站,提高开发效率

🍬引言 🍬什么是低代码平台? 低代码平台(Low-Code Platform)是一种使开发人员和业务用户可以通过图形化界面和少量的编程来创建应用程序的开发工具。与传统的编程方式相比,低代码平台大大简化了开发过程&a…

理解 Tomcat 架构与自定义实现

前言 Tomcat 是一个轻量级的 Web 容器,被广泛应用于 Java Web 开发中。通过它,我们可以轻松地部署和运行 Web 应用。在本文中,我们将深入分析 Tomcat 的核心架构,同时结合一段代码,手动实现一个简化的 Tomcat 服务&am…

用户界面软件02

基于表单的用户界面 在“基于表单的用户界面”里面,用户开始时选中某个业务处理(模块),然后应用程序就使用一系列的表单来引导用户完成整个处理过程。大型机系统上的大部分用户界面都是这样子的。[Cok97]中有更为详细的讨论。 面…

go如何从入门进阶到高级

针对Go语言的学习,不同阶段应采取不同的学习方式,以达到最佳效果.本文将Go的学习分为入门、实战、进阶三个阶段,下面分别详细介绍 一、社区 Go语言中文网 作为专注于Go语言学习与推广的平台,Go语言中文网为开发者提供了丰富的中…

采用标准化的方式开展设计-研发中运用设计模式

概述 实现规范化、标准化的引导式设计,以业务需求为输入,识别业务特点,并通过引导式设计,找到最适合的设计模式、具体方案,汇总成为应用的设计,拉齐各应用的设计一的致性。 采用标准化的方式开展设计…

Qt之屏幕录制设计(十六)

Qt开发 系列文章 - screencap(十六) 目录 前言 一、实现原理 二、实现方式 1.创建录屏窗口 2.录屏窗口类定义 3.自建容器对象定义 4.用户使用 5.效果演示 总结 前言 利用Qt实现屏幕录制设计,可以通过使用Qt自带的类QScreen、QPixma…

【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1. 选择结构基本概念 2. 主要语句类型​(if、if-else、switch) 3. 跃迁函数中变量的取值范围 4. 计算阶跃函数的值 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务:输入x的值&#x…

自定义字典转换器用于easyExcel 导入导出

文章目录 引言I 字典转换器、注解、序列化器注解定义自定义字典转换器用于easyExcel 导入导出自定义字典序列化器II 字典存储设计数据库表结构redis缓存引言 需求导入Excel时,根据字典内容或者字段编码转换 导出Excel时,根据字典内容或者字段编码转换 接口响应数据序列化时,…

Mac软件介绍之录屏软件Filmage Screen

软件介绍 Filmage Screen 是一款专业的视频录制和编辑软件,适用于 Mac 系统 可以选择4k 60fps,可以选择录制电脑屏幕,摄像头录制,可以选择区域录制。同时也支持,简单的视频剪辑。 可以同时录制电脑麦克风声音 标准…

RK3588平台开发系列讲解(系统篇)Linux Kconfig的语法

文章目录 一、什么是Kconfig二、config模块三、menuconfig四、menu 和 endmenu五、choice 和 endchoice六、source七、depends on八、default九、help十、逻辑表达式沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是Kconfig Kconfig的语法及代码结构非常简单。本博…

.NET 9.0 WebApi 发布到 IIS 详细步骤

微软表示,.NET 9 是迄今为止性能最高的 .NET 版本,对运行时、工作负载和语言方面进行了 1,000 多项与性能相关的改进,并采用了更高效的算法来生成更好的代码。 .NET 9 是 .NET 8 的继任者,特别侧重于云原生应用和性能。 作为标准期…

感知器的那些事

感知器的那些事 历史背景Rosenblatt和Minsky关于感知机的争论弗兰克罗森布拉特简介提出感知器算法Mark I感知机争议与分歧马文明斯基简介单层感知器工作原理训练过程多层感知器工作原理单层感知机 vs 多层感知机感知器模型(Perceptron),是由心理学家Frank Rosenblatt在1957年…

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存 1:封装请求图片函数 2:访问的图片都会转为本地缓存,当相同的请求url,会在本地调用图片 3:本地缓存管理【windows与andriod已经测试】【有页面】【有…

复杂园区网基本分支的构建

目录 1、各主机进行网络配置。2、交换机配置。3、配置路由交换,进行测试。4、配置路由器接口和静态路由,进行测试。5、最后测试任意两台主机通信情况 模拟环境链接 拓扑结构 说明: VLAN标签在上面的一定是GigabitEthernet接口的&#xff0c…

快速入门Spring Cloud Alibaba,轻松玩转微服务

​ 1 快速入门Spring Cloud Alibaba,轻松玩转微服务 1.1 架构 架构图: 1.2 项目结构 1.2.1 系统框架版本 版本适配查看:https://sca.aliyun.com/docs/2023/overview/version-explain/ Spring Boot Version :3.2.4 Spring Clo…

数据结构大作业——家谱管理系统(超详细!完整代码!)

目录 设计思路: 一、项目背景 二、功能分析 查询功能流程图: 管理功能流程图: 三、设计 四、实现 代码实现: 头文件 结构体 函数声明及定义 创建家谱树头结点 绘制家谱树(打印) 建立右兄弟…

OpenHarmony通过挂载镜像来修改镜像内容,RK3566鸿蒙开发板演示

在测试XTS时会遇到修改产品属性、SElinux权限、等一些内容,修改源码再编译很费时。今天为大家介绍一个便捷的方法,让OpenHarmony通过挂载镜像来修改镜像内容!触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器,树…

Gitee上传项目代码教程(详细)

工具必备:Git Bash 上传步骤 1.在Gitee创建项目仓库 2.进入本地项目目录 右键打开Git Bash here 3.配置用户名和邮箱 如果之前给git配置过用户名和邮箱可跳过 查看Git是否配置成功:git config --list git config --global user.name "xxx"…

uni-app 资源引用(绝对路径和相对路径)方法汇总

文章目录 一、前言🍃二、绝对路径和相对路径2.1 绝对路径2.2 相对路径 三、引用组件四、引用js4.1 js 文件引入4.2 NPM支持 五、引用css六、引用json6.1 json文件引入 七、引用静态资源7.1 模板内引入静态资源7.2 css 引入静态资源7.3 js/uts 引入静态资源7.4 静态资…