7 支持向量机

news2024/11/19 19:32:49

支持向量机

支持向量机(SVM)是在统计学习理论基础上发展起来的一种数据挖掘方法,1992 年由Boser, Guyon和Vapnik提出,在解决小样本、非线性、高维的回归和分类问题上, 有许多优势。

1 支持向量分类概述

支持向量分类以训练样本集为数据对象,通过分析输入变量和二分类输出变量之间的数量关系,对新样本的输出变量类别值进行分类预测。

1.1 基本思路:确保把握程度

可将训练样本中n 个观测看成p维特征空间上的n 个点,以点的不同形状( 或颜色)代表输出变量的不同类别取值。支持向量分类的建模目的,就是以训练样本为研究对象, 在p 维特征空间中找到一个超平面,能将两类样本有效分开。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TPFnORuy-1670125670520)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020193201545.png)]

参数的确定可按照神经网络的一般方法:通过不断迭代找到最优解。 然而,这样的超平面确定方式可能出现的问题是:

如果训练样本中的两类观测点能够被超平面分开,而且建模的唯二目标就是将两类分开,那么可能找到多个这样的超平面

其中的哪个超平面应是支持向量分类的超平面?答案是:最大边界超平面是支持向量分类的超平面

最大边界超平面,简单讲就是距两个类别( -1 类和1 类)的边界观测点最远的超平面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tyd4UFvy-1670125670521)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020193559572.png)]

1.2 支持向量分类的三种情况

1.2.1 线性可分样本

  • 完全线性可分:说明可以找到一个超平面将两类样本完全线性分开

  • 无法完全线性可分:存在样本点彼此交融

1.2.1 线性不可分样本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kseg1T5v-1670125670522)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020193932281.png)]

2 线性可分问题的支持向量分类

在完全线性可分的情况下,以二维空间为例,可通过以下途径确定并求解超平面:

  • 分别将两类的最外围样本观测点连线,形成两个多边形,它是关于各类样本点集的凸包 , 也就是最小凸多边形,各自类的样本点均在多边形内或边上。
  • 以一类的凸包边界作为基准线,找到另一类边界上的点,过该点做基准线的平行线,得到一对平行线

可以有多条这样的基准线和平行线,找到能正确分割两类且距离最远的一对平行线,并且做平行线的垂线。最大超平面就是垂线的垂直平分线

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0BuzaZzw-1670125670522)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020195022566.png)]

支持向量是位于平行边界上的样本观测点,决定了最大边界超平面。支持向量分类能够有效避免过拟合问题,原因是:过拟合表现在模型过分依赖训练样本。训练样本的微小变动,便会导致模型参数的较大变动,在支持向量分类中、即表现为超平面出现较大移动。由于最大边界超平面仅依赖于少数的支持向量,所以只有当增加或除去支持向量时,最大边界超平面才会移动,否则不发生变化。相对于其他分类预测模型,最大边界超平面的预测稳健性较高。

分类依据是

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dKqYIGO3-1670125670523)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020195055676.png)]

3 广义线性可分问题的支持向量分类

此时超平面的确定应采用“宽松”策略

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T9GIpGfC-1670125670524)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020195225748.png)]

4 复杂条件下的分类

解决线性不可分问题的一般方式是:特征空间的非线性转换。其核心思想为:低维空间中的线性不可分问题,通过非线性转换,可转化为高维空间中的线性可分问题,即通过适当的非线性空间转换变成线性可分问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irQKW8TX-1670125670524)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020195411750.png)]

但是高维度将导致计算的复杂度急剧增加,且模型的参数估计在小样本下几乎是无法实现的,这就是所谓的维灾难问题

支持向盘分类的特色在于通过核函数克服维灾难问题。

5 支持向量机的R语言实现

5.1 svm函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asHRGaxY-1670125670525)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020195604824.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qFWhmLWW-1670125670525)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020195613531.png)]

5.2 tune.svm函数

损失惩罚参数C 以及核函数的参数,都是支持向量机中的重要参数。可通过交叉验证方式帮助确定参数。tune. svm 函数可自动实现10 折交叉验证,并给出预测误差最小时的参数值。tune. svm 函数的基本书写格式为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCT5SGnN-1670125670526)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020195735599.png)]

5.3 模拟线性可分情况下的支持向量机

#############模拟线性可分下的SVM
set.seed(12345)
x<-matrix(rnorm(n=40*2,mean=0,sd=1),ncol=2,byrow=TRUE)
y<-c(rep(-1,20),rep(1,20))
x[y==1,]<-x[y==1,]+1.5
data_train<-data.frame(Fx1=x[,1],Fx2=x[,2],Fy=as.factor(y))  #生成训练样本集

x<-matrix(rnorm(n=20,mean=0,sd=1),ncol=2,byrow=TRUE)
y<-sample(x=c(-1,1),size=10,replace=TRUE)
x[y==1,]<-x[y==1,]+1.5
data_test<-data.frame(Fx1=x[,1],Fx2=x[,2],Fy=as.factor(y)) #生成测试样本集

plot(data_train[,2:1],col=as.integer(as.vector(data_train[,3]))+2,pch=8,cex=0.7,main="训练样本集-1和+1类散点图")
library("e1071")
SvmFit<-svm(Fy~.,data=data_train,type="C-classification",kernel="linear",cost=10,scale=FALSE)
summary(SvmFit)
SvmFit$index
plot(x=SvmFit,data=data_train,formula=Fx1~Fx2,svSymbol="#",dataSymbol="*",grid=100)
SvmFit<-svm(Fy~.,data=data_train,type="C-classification",kernel="linear",cost=0.1,scale=FALSE)
summary(SvmFit)
##############10折交叉验证选取损失惩罚参数C
set.seed(12345)
tObj<-tune.svm(Fy~.,data=data_train,type="C-classification",kernel="linear",
  cost=c(0.001,0.01,0.1,1,5,10,100,1000),scale=FALSE)
summary(tObj)
BestSvm<-tObj$best.model
summary(BestSvm)
yPred<-predict(BestSvm,data_test)
(ConfM<-table(yPred,data_test$Fy))
(Err<-(sum(ConfM)-sum(diag(ConfM)))/sum(ConfM))
  1. 在线性可分的原则下,随机生成训练样本集和测试样本集。其中的输人变量有2个,输出变量类别为-1和+1,应为因子

  2. 采用线性核函数,比较当损失惩罚参数较大和较小下的支持向量个数和最大边界超平面。

  3. 利用10 折交叉验证找到预测误差最小下的损失惩罚参数

  4. 利用最优模型对测试样本集做预测

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OPTOAkxV-1670125670526)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020200532772.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dOsnH3Cs-1670125670527)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020200637150.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlpzL5MN-1670125670527)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020200647292.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGkj8F1P-1670125670528)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020200725067.png)]

5.4 模拟线性不可分的支持向量机

##############模拟线性不可分下的SVM
set.seed(12345)
x<-matrix(rnorm(n=400,mean=0,sd=1),ncol=2,byrow=TRUE)
x[1:100,]<-x[1:100,]+2
x[101:150,]<-x[101:150,]-2
y<-c(rep(1,150),rep(2,50))
data<-data.frame(Fx1=x[,1],Fx2=x[,2],Fy=as.factor(y))
flag<-sample(1:200,size=100)
data_train<-data[flag,]
data_test<-data[-flag,]
plot(data_train[,2:1],col=as.integer(as.vector(data_train[,3])),pch=8,cex=0.7,main="训练样本集散点图")
library("e1071")
set.seed(12345)
tObj<-tune.svm(Fy~.,data=data_train,type="C-classification",kernel="radial",
  cost=c(0.001,0.01,0.1,1,5,10,100,1000),gamma=c(0.5,1,2,3,4),scale=FALSE)
plot(tObj,xlab=expression(gamma),ylab="损失惩罚参数C",
  main="不同参数组合下的预测错误率",nlevels=10,color.palette=terrain.colors)
   
BestSvm<-tObj$best.model
summary(BestSvm)
plot(x=BestSvm,data=data_train,formula=Fx1~Fx2,svSymbol="#",dataSymbol="*",grid=100)
yPred<-predict(BestSvm,data_test)
(ConfM<-table(yPred,data_test$Fy))
(Err<-(sum(ConfM)-sum(diag(ConfM)))/sum(ConfM))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxYao2q9-1670125670528)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020200841139.png)]

5.5 模拟多分类的支持向量机

##############模拟多类别的SVM
set.seed(12345)
x<-matrix(rnorm(n=400,mean=0,sd=1),ncol=2,byrow=TRUE)
x[1:100,]<-x[1:100,]+2
x[101:150,]<-x[101:150,]-2
x<-rbind(x,matrix(rnorm(n=100,mean=0,sd=1),ncol=2,byrow=TRUE))
y<-c(rep(1,150),rep(2,50))
y<-c(y,rep(0,50))
x[y==0,2]<-x[y==0,2]+3
data<-data.frame(Fx1=x[,1],Fx2=x[,2],Fy=as.factor(y))
plot(data[,2:1],col=as.integer(as.vector(data[,3]))+1,pch=8,cex=0.7,main="训练样本集散点图")
library("e1071")
set.seed(12345)
tObj<-tune.svm(Fy~.,data=data,type="C-classification",kernel="radial",
  cost=c(0.001,0.01,0.1,1,5,10,100,1000),gamma=c(0.5,1,2,3,4),scale=FALSE)
BestSvm<-tObj$best.model
summary(BestSvm)
plot(x=BestSvm,data=data,formula=Fx1~Fx2,svSymbol="#",dataSymbol="*",grid=100)
SvmFit<-svm(Fy~.,data=data,type="C-classification",kernel="radial",cost=5,gamma=1,scale=FALSE)
head(SvmFit$decision.values)
yPred<-predict(SvmFit,data)
(ConfM<-table(yPred,data$Fy))
(Err<-(sum(ConfM)-sum(diag(ConfM)))/sum(ConfM))

n",kernel=“radial”,cost=5,gamma=1,scale=FALSE)
head(SvmFit d e c i s i o n . v a l u e s ) y P r e d < − p r e d i c t ( S v m F i t , d a t a ) ( C o n f M < − t a b l e ( y P r e d , d a t a decision.values) yPred<-predict(SvmFit,data) (ConfM<-table(yPred,data decision.values)yPred<predict(SvmFit,data)(ConfM<table(yPred,dataFy))
(Err<-(sum(ConfM)-sum(diag(ConfM)))/sum(ConfM))
``

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gRxGPPUk-1670125670529)(C:\Users\ALANSHAO\AppData\Roaming\Typora\typora-user-images\image-20221020201203537.png)]

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

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

相关文章

支持向量机核技巧:10个常用的核函数总结

支持向量机是一种监督学习技术&#xff0c;主要用于分类&#xff0c;也可用于回归。它的关键概念是算法搜索最佳的可用于基于标记数据(训练数据)对新数据点进行分类的超平面。 一般情况下算法试图学习一个类的最常见特征(区分一个类与另一个类的特征)&#xff0c;分类是基于学…

[附源码]JAVA毕业设计律师事务所网站(系统+LW)

[附源码]JAVA毕业设计律师事务所网站&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&a…

ubuntu20.04安装anaconda3搭建python环境

1.清华源下载anaconda3 清华源anaconda软件镜像网站&#xff1a; Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载完成在终端打开Downloads 运行 bash Anaconda3-5.3.1-Linux-x86_64.sh 进入到下载页面 紧接着你可以使用conda --…

HTTP抓包神器---Fiddler

今天我们介绍一个好用的抓包工具.是针对于HTTP协议的抓包工具. Fiddler 下载地址 下载工具当然是要去官网下载啦. 这里为了防止有些人在网上找不到下载路径.我们直接把下载路径放在下面. https://www.telerik.com/download/fiddler 下载 点击上述链接以后会直接跳转到下…

蓝海创意云·11月大事记 || 12月,暖心相伴

秋尽冬生&#xff0c;日短天寒 告别了立冬与小雪 时光不紧不慢开启了新一月的篇章 万物冬藏&#xff0c;沉淀酝酿 站在十二月的路口 蛰伏打磨&#xff0c;静待厚积而薄发 导 读 ● 客户端更新&#xff1a;新增PSD通道合成选项 ● 渲染案例&#xff1a;绝代双骄重启江湖…

K8S - Pod 的概念和简介

1. POD的基本概念 Pod 是K8s 系统中可以创建&#xff08;部署&#xff09;和管理的最小单元。 Pod 里面可以包含多个容器(多实例&#xff09;&#xff0c;是一组容器的集合。 也就是讲K8S 不会直接管理容器 1个POD中的容器共享网络命名空间&#xff08;共享ip&#xff09; P…

MongoDB_前期准备(一)

目录一、数据库&#xff08;Database&#xff09;数据库分类1、关系型数据库&#xff08;RDBMS&#xff09;2、非关系型数据库&#xff08;No SQL&#xff09;二、MongoDB简介1&#xff09;MongoDB VS MySql2&#xff09;MongoDB中的三个概念3&#xff09; MongoDB安装一、数据…

Reading Note(10)——AutoBridge

这篇论文是FPGA 2021年的best paper award&#xff0c;主要解决的是在HLS编译过程中优化布局和布线&#xff0c;最终达到整个multi-die的FPGA板上的大规模HLS设计时钟频率尽可能提升的目的&#xff0c;这篇工作在当前chiplet工艺铺展开来的当下更加有现实意义&#xff0c;通过这…

代码随想录训练营第41天|LeetCode 343. 整数拆分、 96.不同的二叉搜索树

参考 代码随想录 题目一&#xff1a;LeetCode 343.整数拆分 确定dp数组及其下标的含义 dp[i]为整数i拆分后得到的最大化乘积。确定递推公式 dp[i]可以有两种方式得到&#xff1a; dp[i] j * (i-j)&#xff0c;即只拆分成两个数&#xff0c;其中1 < j < i/2&#xff…

Nginx的高可用集群

1、什么是 nginx高可用 只有一台nginx服务器时&#xff0c;如果nginx服务器宕机了&#xff0c;那么请求就无法访问。 要实现高可用&#xff0c;那就可以部署多台nginx服务器&#xff0c;下面以两台nginx服务器为例&#xff0c;示意图如下&#xff1a; 要配置nginx集群&#xf…

西部学刊杂志西部学刊杂志社西部学刊编辑部2022年第22期目录

百年党建与马克思主义中国化研究 党的纪律建设的实践、启示与创新——基于“三大纪律八项注意”的研究 武艳; 5-8 西部研究《西部学刊》投稿&#xff1a;cn7kantougao163.com 新疆红色资源运用现状调查研究——以南疆部分地区为例 王艺潼;努尔古扎丽阿不都克里木; 9-12…

BP神经网络对指纹识别的应用(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 在现代计算机具有强大的计算和信息处理能力的今天,指纹识别作为个人身份鉴定等领域的热点问题一直被人们长期关注着,目前也得到…

版本控制 | 一文了解什么是组件化开发,以及如何从单体架构转向组件化开发

传统开发模式中&#xff0c;所有代码都写在APP模块中。随着项目的发展&#xff0c;代码量逐渐庞大&#xff0c;编译时间越来越长。为了方便后续项目的开发和测试、提高编译性能&#xff0c;您需要了解组件化开发&#xff0c;以及如何利用版本控制系统从单体架构转向组件化开发。…

【Python自然语言处理】使用SVM、随机森林法、梯度法等多种方法对病人罹患癌症预测实战(超详细 附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、数据集背景 乳腺癌数据集是由加州大学欧文分校维护的 UCI 机器学习存储库。 数据集包含 569 个恶性和良性肿瘤细胞样本。 样本类别分布&#xff1a;良性357&#xff0c;恶性212 数据集中的前两列分别存储样本的唯一 …

Prototypical Networks for Few-shot Learning

摘要 我们为零样本分类问题提出了一个原型网络。在这里分类器必须能够被泛化到新类别&#xff08;在训练集中不可见&#xff09;&#xff0c;每个新类只给出少量示例。 原型网络能够学习一个度量空间&#xff0c;通过计算每个类别的原型表示距离实现分类。与少样本学习近几年的…

华为机试 - 完全二叉树非叶子部分后序遍历

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 给定一个以顺序储存结构存储整数值的完全二叉树序列&#xff08;最多1000个整数&#xff09;&#xff0c;请找出此完全二叉树的所有非叶子节点部分&#xff0c;然后采用后序遍历方式将此部分树&#x…

AOP事务管理(下)

Transactional注解可以设置参数。 readOnly&#xff1a;true只读事务&#xff0c;false读写事务&#xff0c;增删改要设为false,查询设为true。 timeout:设置超时时间单位秒&#xff0c;在多长时间之内事务没有提交成功就自动回滚&#xff0c;-1表示不设置超 时时间。 rollbac…

熬夜也要肝完的阿里内部面试官手册,吃透直接拿下大厂心仪 offer

前言 蓦然回首自己做开发已经十年了&#xff0c;这十年中我获得了很多&#xff0c;技术能力、培训、出国、大公司的经历&#xff0c;还有很多很好的朋友。但再仔细一想&#xff0c;这十年中我至少浪费了五年时间&#xff0c;这五年可以足够让自己成长为一个优秀的程序员&#…

ASP.NET通用版权限管理系统源码分享

ASP.NET通用版权限管理系统源码 源码分享&#xff01;需要源码学习可私信我。 主要功能有&#xff1a;权限管理、角色管理、部门管理、用户管理、公司管理、模块管理、系统设置。 一、 权限管理 以关键字&#xff08;Key&#xff09;的方式来定义系统的权限&#xff0c;使系统…

(附源码)springboot农田灌溉设备管理系统 毕业设计 260931

题 目 springboot 农田灌溉设备管理系统 目 录 摘要 1 1 绪论 1 1.1选题的目的和意义 1 1.2研究现状 1 1.3系统开发技术的特色 1 1.4论文结构与章节安排 1 2 农田灌溉设备管理系统 系统分析 3 2.1 可行性分析 3 2.2 系统流程分析 3 2.2.1数据增加流程 3 2.3.2数据修改流程…