通俗易懂SVM原理介绍,适合小白食用

article/2025/10/1 4:04:33

目录

1、SVM概念描述

2、SVM数学表达及相关计算

3、SVM优化问题定义

附:证明区

【证明1】

【计算1】


1、SVM概念描述

如图一所示,存在两个数据集,我们希望通过一个超平面将两个数据集分割开,并且我们希望这个超平面离两个数据集越远越好,某种意义上,这代表两个数据集分的更开。即图中的margin可以越大越好。

 

因为margin越大,对于新的数据点,错误分类的可能就越小。

如图二所示。可以看到,图中有两个可以选择的hyperplane,其中绿色的hyperplane的margin比较小,而黄色的比较大。对于一个新的点,图中用紫色圆形块标注,如果使用绿色的hyperplane将会把这个点归到第二个数据集中,而使用黄色的hyperplane则会归到第一个数据集,显然,如果去掉这两个hyperplane,单纯靠人为判断,我们也会将新的点归到第一个数据集,也就是说,此时margin比较小的绿色hyperplane对新的点的归类是错误的。这也就是我们说的,margin越大错误分类可能性越小。

2、SVM数学表达及相关计算

目标:找到一个超平面l(x) = w^{T}x+b 来区分两个数据集,且超平面距离两个数据集的距离要最大。

y_{i}=\left\{\begin{matrix}+1\, \,\, \, \, \, \, \, if \, \, l(x_{i})>0 \\-1\, \,\, \, \, \, \, \, if \, \, l(x_{i})\leq 0 \end{matrix}\right.

其中yi是第i个点的标签,+1表示属于第一个数据集,-1表示属于第二个数据集。

这样对于新的点x,我们就可以通过l(x)的值判断x属于哪个数据集。

但是还需要注意到,l(x)中有两个未知变量,分别是w,b,这两个未知量需要通过原先有的带标签数据集来决定。

为了严格起见以及方便运算(更好确定margin大小),我们做一点小小的调整。

通过选取新的w,b,更新y的定义如下:

y_{i}=\left\{\begin{matrix}+1\, \,\, \, \, \, \, \, if \, \, l(x_{i})\geq +1 \\-1\, \,\, \, \, \, \, \, if \, \, l(x_{i})\leq -1 \end{matrix}\right.

改变前后示意图如图三所示。

但要注意的是,这是等价的转换,因为图三左边的l(x)和右边的l(x)并不是一样的。相反这是通过更新w,b,生成新的l(x)。也就是说,如果第一张图中没有一个点既不满足l(x)> 0,也不满足l(x)\leq 0的话(既不在黄色区域也不在蓝色区域),在第二张图中,也不会有点的l(x)在[-1,+1]区间(既不在黄色区域也不在蓝色区域)。

具体证明过程写在文末证明区【证明1】,自行食用~

通过改变定义,我们可以得到margin的距离,从图三的右图也可以发现,这个距离就是l(x)=+1l(x)=-1之间的距离。

这个距离通过计算可以知道是2/||\omega ||

计算过程同样写在文末证明区【计算1】,感兴趣的自行查看~

3、SVM优化问题定义

通过以上对目标的阐述以及相关计算,我们可以对SVM问题进行定义:

min_{\omega ,b}f_{svm}(\omega ,b) = \frac{\lambda }{2}\left \| \omega \right \|^{2}+\sum_{i=1}^{m}max\left \{ 0,1-y_{i}(x_{i}^{T}\omega +b) \right \}

其中第一项中\frac{\left \| \omega \right \|^{2}}{2}用来衡量距离大小,\sum_{i=1}^{m}max\left \{ 0,1-y_{i}(x_{i}^{T}\omega +b) \right \}用来衡量错误分类情况,其中(x_{i}^{T}\omega +b)为预测的标签,y_{i}是真实标签。

\lambda则是用来确定这两项的比重,\lambda越大,追求更大的margin就成了主要目标,否则,追求更小的错误分类成为主要目标。

然而这还是基础版本的SVM,因为这个函数第二项是不平滑项,而优化问题中不平滑项通常需要转换成平滑项,可以通过使用Huber函数将后一项平滑化。也有其他处理方式,这里不过多介绍。

 

 

附:证明区

【证明1】

【计算1】

 

 

 

 


http://chatgpt.dhexx.cn/article/DumvQyoe.shtml

相关文章

01-Hive创建表

声明:本实验环境是Apache hadoop-2.2.0,zookeeper-3.4.5,mysql Server version: 5.1.73作为元数据库,hive版本是apache-hive-0.9.0-bin,都是apache,不是CDH和其他。本实验集群3台,一个主节点(ha…

hive 中创建表的三种方式

官网地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManualDDL 通常我们所使用的创建hive表有三种方式 1.create table 首先我们找到官网对创建表的描述如下: ’[]’ 表示可选,’|’ 表示几选一 CREATE [TEMPORARY] [EXT…

hive创建新表——基础

创建基础表 1、创建表: create table if not exists orders 创建一个名叫“orders”的表,“if not exists”可以写可不写,如果相同名字的表已经存在,则抛出异常,可以用 IF NOT EXIST 选项来忽略这个异常。 2、定义表…

HIVE的常用操作-建库和表-插入数据

hive的安装(远程模式) 点击打开链接 使用hive----------------------- 启动hadoop 启动hive 创建数据库: create database myhive; 查看数据库: hive (default)> show databases; OK database_name default myhive 数…

Hive三种建表语句详解

转载自:https://blog.csdn.net/qq_36743482/article/details/78383964 注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料, 官网:https://cwiki.apache.org/confluence/display/Hive/Home#…

关于hive建表查询语句小记

库相关操作 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_nameproperty_value, ...)]; IF NOT EXISTS 也就是没有重复库就创建,有重复就不执行建库 保证了建库…

hive、pg库,建表语句及查询表结构语句

1、hive hive 建表语句 DROP TABLE IF EXISTS tmp_001; CREATE TABLE tmp_001 (etl_time timestamp comment , day_id double comment , subs_id string comment , msisdn int comment ) comment partitioned by…

3、Hive数据仓库——建表语句

文章目录 Hive基本操作Hive查看SQL解析计划Hive建表建表1:全部使用默认建表方式 Hive 内部表 (Managed tables)指定location (这种方式也比较常用)formatted 查看该表的结构化数据,但并不列出表中的数据将本地数据上传到HDfS上 Hi…

HIVE的三种建表方式

目录 一、直接建表二、as (直接使用查询结果插入到一张新表)三、like(复制表结构) 一、直接建表 中括号里面的均为可选项 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type [COMMENT col_comment], ...…

Hive学习3:Hive三种建表语句详解

注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料, 官网:https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation Create Table 官网说明 Hive建表方式共有三种&#xff…

Hive_ Hive 建表语句详解

参考文章: https://blog.csdn.net/qq_36743482/article/details/78383964 最近博主在编写一个每天定时创建Hive 分区的脚本,其中需要创建Hive表, 开始的时候我以为创建Hive 表的语句顺序是比较宽松的,经过测试发现不然&#xf…

Hive建表语句详解--CREATE TABLE

创建表的三种方法 Hive创建表的方式(默认路径/user/hive/warehouse,也可以location指定,主要针对external表) 1、使用create命令创建一个新表,带分区 CREATE TABLE mydb.dept( dept_no int, addr string, tel string) par…

【Hive】Hive 创建表

学习笔记—Hive创建表 1. Hive语句的特点 HQL 语言大小写不敏感,但内容分大小写(where ,if/ case when,如:数据表内容某人名叫Tom,则条件后不能写tom,HDFS 路径名(NameNode)分大小写…

hive建表语句

目录 一、建表语句1、创建内部表2、创建外部表3、建表高阶语句 CTAS 和 WITH4、向临时表中插入原表中的数据5、创建分区表 一、建表语句 1、创建内部表 建表: CREATE TABLE phone_info(id int,name String,storage String,price double) ROW FORMAT DELIMITED //…

c语言void* arg,void * arg什么意思

许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据…

什么是arguments

什么是arguments 形参:函数定义的参数实参:函数调用时实际传递的参数。参数匹配是从左向右进行匹配。如果实参个数少于形参,后面的参数对应赋值undefined。实参的个数如果多于形参的个数,可以通过arguments访问。【案例】模拟封装…

python函数参数*arg和**args的用法

import numpy as np """ 做饭函数,表示午饭有什么,foods表示一个元组 """ def make_meals(*foods):for item in foods:print(今天午饭有,item)def dictionary(**dic):for key,value in dic.items():print(英文名(key) , key , &…

什么是:arguments

在调用函数时,浏览器每次都会传递进两个隐含的参数: 1.函数的上下文对象this 2.封装实参的对象arguments 什么是:arguments 1.arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度 在调用函数时,我们所传递的实…

python中的arg,*args,args,**kwargs,kwargs的关系和区别

arg就是指一个参数 def func(arg):print(arg)func(2) *args 是用来将参数打包成元组给函数调用的,args即是传给函数的参数所构成的元组 def func(arg, *args):print(arg, *args)func(1, 2, 3, 4, 5, 6, 7)**kwargs是用来将关键字参数打包成字典给函数调用的&#…

Python *arg与**kwarg区别

*arg 与 **kwargs介绍 args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。这其实就是 Python 中可变参数的两种形式,并且*args 必须放在 **kwargs的前面,因为位置参数在关键…