手推支持向量机01-硬间隔SVM-模型定义(最大间隔分类器)

2024-02-28 05:48

本文主要是介绍手推支持向量机01-硬间隔SVM-模型定义(最大间隔分类器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.写在前面

2.硬间隔SVM(hard-margin SVM)


1.写在前面

        支持向量机SVM是机器学习中非常流行的分类算法,最近朋友推荐了机器学习-白板推导系列(六)-支持向量机SVM(Support Vector Machine)视频,感觉这个大佬讲的非常棒,之前写的关于svm的东西太浅显了,于是重新整理,方便以后复习。我们主要是从理论推导SVM是怎么一步一步演化到一个优化问题。从核心概念上讲,有一个口头禅:SVM有三宝,间隔、对偶、核技巧

        首先核技巧和svm没有一个具体的绑定关系,在svm之前核函数已经有一套单独的理论体系了,只不过是核技巧能够让svm从普通特征空间映射到高维空间,可以实现一定的非线性分类。

        从类别上我们可以分为硬间隔SVM(hard-margin SVM)、软间隔SVM(soft-margin SVM)、kernel SVM。根据不同的情况我们使用不同的SVM算法。我们首先讲一下最基础的硬间隔SVM(hard-margin SVM)。

2.硬间隔SVM(hard-margin SVM)

        我们先从几何角度上看待SVM算法,首先SVM首次提出是为了解决二分类问题的,比如我们可以画一个平面,横纵坐标为x1,x2。我们在图中表示两个类别,一般情况下,我们需要找到一个线,让这两个类别正确的分割开。我们定义这个线是一个超平面w^{T}x+b,那么我们模型可以表示为f(w)=sign(w^{T}x+b),sign是一个符号函数,当后面大于0时,属于+1;当后面小于等于0时,属于-1。所以SVM本质上是一个纯粹的判别模型,跟概率没有关系

        我们可以知道能够正确把+1和-1分开的线是有好多条,可以说是有无数条的。我们在感知机学习算法PLA(Percetron Learning Algorithm)中根据初始值不同可以找到对应的超平面,从而将分类问题解决掉。这个SVM到底有什么特别之处呢?我们知道有那么多条可以分类的直线,哪一条才是最好的呢?SVM从几何意义上讲就是从这么多可以正确分类的超平面之中找到最好的一个。因为我们机器学习算法不仅仅要关注训练误差,我们更要关注期望损失,或者说测试误差

        假设我们找到上面这样一条线,它的鲁棒性是非常差的,也就是说这条直线对于噪声是非常的敏感。加入有一个样本在直线附近,很大概率出现误判,所以其泛化误差是非常差的。这个就是我们的出发点,找到最中间的一条超平面,让它离样本点都足够的大。

        硬间隔SVM,别称是最大间隔分类器。我们从这几个字出发,用数学语言将刚才几何意义表达出来。最大我们用max表示,间隔我们用margin表示,w,t都是相关的,样本点用这样表示:\{(x_{i},y_{i})\}_{i=1}^{N},x_{i}\euro R^{\Phi },y_{i}\euro \{-1,1\}  ,约束条件st满足:

        对于上面这个公式,我们可以进一步写做下面形式,同时我们最大间隔分类器通过数学语言表达出来了:

        下面我们看一下我们自己定义的间隔margin函数,我们把margin定义为样本点到超平面的最小距离distance。从N个样本distance里面,找到最小的那个distance。点到直线距离,我们重新复习一下:

        这样的话,margin和max margin就可以表示为:

        因为y_{i}(w^{T}x_{i}+b)>0,所以上面\left | w^{T}x_{i}+b \right |绝对值可以去掉。变成了下面形式:

        我们继续观察上面的式子,我们知道min是和Xi相关,和w是没有关系的。所以我们可以把w往前提,得到下面的式子:

        我们继续观察我们的约束st:y_{i}(w^{T}x_{i}+b)>0,可以讲一定存在一个 r>0,使得最小的y_{i}(w^{T}x_{i}+b)=r。并且把上面公式中替换成r。

        而且,这个 r 我们可以定义为1,其实是为了简化运算。为什么是可行的呢?这个是函数间隔和几何间隔的问题,(w^{T}x_{i}+b)是那个超平面,如果同时将w和b放大2倍,(2w^{T}x_{i}+2b),它们指的是同一个超平面。比如我们规定x的范数 \left \| w \right \|=1,2或者100,就是将它固定下来,这样我们指定一个超平面(w^{T}x_{i}+b)的时候,值是能够确定下来的。不然这个值是有无穷多的,因为可以随意缩放。r是一个大于0的数子,我们可以以任意比例缩放为1,对整个等式是没有影响的,仅仅为了简化运算。而且最大化可以转化为最小化。

        我们整个式子可以简化为:

        所以硬间隔SVM最后转化为了上面一个优化问题,并且是一个凸优化的问题。一共有N个约束,目标函数是二次的。整个几何意义转化为了凸优化问题,关于求解整个公式,我们会单独分析。如果样本数目不多,维数不多,就是一个简单的QP问题(二次规划问题),直接利用套件求解,如果复杂的话,需要引入对偶和kernel方法,用来求解该优化问题

这篇关于手推支持向量机01-硬间隔SVM-模型定义(最大间隔分类器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/754536

相关文章

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo