支持向量机

支持向量机(Support Vector Machine,SVM)是一个非常优雅的算法,具有非常完善的数学理论,常用于数据分类,也可以用于数据的回归预测中。支持向量机在许多领域都有广泛的应用,如文本分类、图像识别、生物信息学、金融预测等。

支持向量机的应用:

(1)文本分类:支持向量机可以用于文本分类任务,如垃圾邮件过滤、情感分析、主题分类等。通过对文本数据进行预处理,提取特征,然后使用支持向量机进行训练和预测,可以实现对文本数据的自动分类。

(2)图像识别:支持向量机可以用于图像识别任务,如手写数字识别、人脸识别、物体检测等。通过对图像数据进行预处理,提取特征,然后使用支持向量机进行训练和预测,可以实现对图像数据的自动识别。

(3)生物信息学:支持向量机在生物信息学领域有广泛应用,如基因表达数据分析、蛋白质结构预测、药物设计等。通过对生物数据进行预处理,提取特征,然后使用支持向量机进行训练和预测,可以帮助研究者发现新的生物学知识。

(4)金融预测:支持向量机可以用于金融预测任务,如股票价格预测、信用评分、风险评估等。通过对金融数据进行预处理,提取特征,然后使用支持向量机进行训练和预测,可以帮助投资者和金融机构做出更好的决策。

用一根棍分开不同颜色小球,在放更多球之后,仍然适用。

448ee3497b9b45cd8669e7cf5763d6cc.jpeg

我们可以在中间斜放一根直线将其分开,随后又在桌上放了更多的球,有一个球站错了类别。

b649613801d7483892f81c8d9a24f1e6.jpeg 

这样放置我们以后在加其他小球这依然是一个良好的分割线,因为我们有了容错的间隔(margin)。

 我们再改变小球的位置

1811169b801a4d04991d51cf2d9c2d27.jpeg

这样我们不能很好的分开两种球了,可以使用SVM,将维度提升

f1da5eed2d7940d5b58dc0559c8ae3cf.jpeg 

这样我们就可以通过svm分开两种类别。在 SVC 中,我们可以用高斯核函数来实现这个功能:kernel='rbf'

支持向量机的基本模型是定义在特征空间上的间隔最大的线性分类器。它是一种二分类的模型,当采用了核技巧之后,支持向量机可以用于非线性分类。 


  • 当训练数据线性可分的时候,通过硬间隔最大化,学习得到一个线性可分支持向量机。
  • 当训练数据近似线性可分时,通过软间隔最大化,学习一个线性支持向量机。
  • 当训练数据不可分的时候,通过使用核技巧以及软间隔最大化,学一个非线性支持向量机。 

左图的边际不及右边的边际margin大,我们选择右边的图作为边界最好的划分。因为在有新的点出现的时候左边图的边际会错误分类一些点,而右侧就能很好的分类。 

d14b1bf824014b3f81f14f9d3f3cfdaa.jpeg 9fdcd1d054044ea6aa70cc2704869dc3.jpeg

SVM学习的目的在于找到具有最大边缘的超平面。 

SVM 是 N 维空间的分类超平面,它将空间切分成两部分。对于二维空间,它是一条线,对于三维空间,它是一个平面,对于更高维空间,它是超平面。 

为了得到泛化性更好的分类器,分类平面应该应该不偏向于任何一类,并且距离两个样本都尽可能远,这种以最大化分类间隔为目标的线性分类器就是支持向量机。 


硬间隔指的是让所有的样本都不在最大间隔之间,并位于正确的一边,如果出现异常值、或者样本不能线性可分,硬间隔无法实现。

软间隔指的是我们容忍一部分样本在最大间隔之内,甚至在错误的一边。软间隔可以应用在一些线性不可分的场景。 

惩罚参数 C  

C越大说明违反限制间隔的样本点带来的损失就越大,就要减少这些样本的数量,所以间隔就要越小。 

C越小说明违反限制间隔的样本点带来的损失就越小,可以适当增大间隔,以增加模型的泛化能力。 

 467b6a659e6f4db5b11eefaadf3bffd0.png

26679e32c3724439a99773ef6c98a97c.png 

Demo实践 我们利用sklearn直接调用 SVM函数进行实践尝试

库函数导入 

import numpy as np ## 导入画图库
import matplotlib.pyplot as plt
import seaborn as sns## 导入逻辑回归模型函数
from sklearn  import svm

 构建数据集并进行模型训练

x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 0, 0, 1, 1, 1])## 调用SVC模型 (支持向量机分类)
svc = svm.SVC(kernel='linear')## 用SVM模型拟合构造的数据集
svc = svc.fit(x_fearures, y_label)

 模型参数查看

svc.coef_
svc.intercept_# [0.33364706 0.33270588]
# [-0.00031373]

 模型预测

y_train_pred = svc.predict(x_fearures)
y_train_pred# [0 0 0 1 1 1]

可视化 

x_range = np.linspace(-3, 3)w = svc.coef_[0]
a = -w[0] / w[1]
y_3 = a*x_range - (svc.intercept_[0]) / w[1]# 可视化决策边界
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.plot(x_range, y_3, '-c')
plt.show()

当存在线性不可分的场景时,我们需要使用核函数来提高训练样本的维度、或者将训练样本投向高维。

高斯核(RBF):一般是通过将样本投射到无限维空间,使得原来不可分的数据变得可分。

SVM 默认使用 RBF 核函数,将低维空间样本投射到高维空间。 

支持向量机的总结:

优点:

  1. 可以解决高维数据问题,因为支持向量机通过核函数将原始数据映射到高维空间。
  2. 对非线性问题具有较好的处理能力,通过引入核函数,支持向量机可以处理非线性可分的数据。
  3. 鲁棒性较好,支持向量机只关心距离超平面最近的支持向量,对其他数据不敏感,因此对噪声数据具有较强的抗干扰能力。

缺点:

  1. 对于大规模数据集,支持向量机的训练时间较长,因为需要求解一个二次规划问题。
  2. 对参数和核函数的选择敏感,不同的参数和核函数可能导致模型性能差异较大,需要进行参数调优。
  3. 对于线性不可分的数据,需要引入核函数,但选择合适的核函数并不容易。 

支持向量机是一种强大的机器学习算法,具有广泛的应用前景。在实际应用中,需要根据具体问题选择合适的核函数和参数,以达到最佳的预测性能。 

 

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

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

相关文章

数据库管理phpmyadmin

子任务1-PHPmyadmin软件的使用 本子任务讲解phpmyadmin的介绍和使用操作。 训练目标 1、掌握PHPmyadmin软件的使用方法。 步骤1 phpMyAdmin 介绍 phpmyadmin是一个用PHP编写的软件工具,可以通过web方式控制和操作MySQL数据库。通过phpMyAdmin可以完全对数据库进行…

如何构建起自己的伦敦银交易系统?

投资者在市场这个江湖中行走,就需要有一技防身,不然很容易会被市场的风险所淹没,这个“一技”指的就是伦敦银交易系统。如果投资者要构建起自己的伦敦银交易系统,应该从哪几个方面着手呢?下面我们就来讨论一下。 分析方…

【算法与数据结构】583、72、LeetCode两个字符串的删除操作+编辑距离

文章目录 一、583、两个字符串的删除操作二、72、编辑距离三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、583、两个字符串的删除操作 思路分析:本题的思路和115、不同的子序列差不多,只是变成…

Python—数据可视化Seaborn大全:参数详解与实战案例全解析【第52篇—python:Seaborn大全】

文章目录 Seaborn库常用绘图详解与实战引言安装与导入一、散点图参数说明实战案例 二、直方图参数说明实战案例 三、线性关系图参数说明实战案例 四、热力图参数说明实战案例 五、分布图参数说明实战案例 六、箱线图参数说明实战案例 七、联合分布图参数说明实战案例 八、小提琴…

echarts条形图添加滚动条

效果展示: 测试数据: taskList:[{majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {majorDeptName:测试,finishCount:54,notFinishCount:21}, {maj…

Pytest框架测试

Pytest 是什么? pytest 能够支持简单的单元测试和复杂的功能测试;pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试;使用 pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。pytest 支持 315 种以上的插件;为什么要选择 Pytest 丰…

【axios报错异常】: Uncaught ReferenceError: axios is not defined

问题描述: 当前代码在vivo手机和小米手机运行是正常的,点击分享按钮调出相关弹框,发送接口进行分享,但是现在oppo手机出现了问题: 点击分享按钮没有反应. 问题解析: 安卓同事经过查询后,发现打印了错误: 但是不清楚这个问题是安卓端造成的还是前端造成的,大家都不清楚. 问题…

图论练习3

内容:过程中视条件改变边权,利用树状数组区间加处理 卯酉东海道 题目链接 题目大意 个点,条有向边,每条边有颜色和费用总共有种颜色若当前颜色与要走的边颜色相同,则花费为若当前颜色与要走的边颜色不同,…

Java面试——计网篇

一、基础篇 1、 TCP/IP 网络模型 对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,而设备是多样性的,所以要兼容多…

【Java程序设计】【C00245】基于Springboot的家政服务管理平台(有论文)

基于Springboot的家政服务管理平台(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的家政服务管理平台 本系统分为前台模块、管理员功能模块、用户功能模块以及服务人员功能模块。 前台模块:系统首页的…

C2-Search-Netlas:一款基于Netlas API的强大C2服务器识别与检测工具

关于C2-Search-Netlas C2-Search-Netlas是一款功能强大的命令与控制(C2)服务器检测工具,该工具使用Java语言开发,基于Netlas API实现其功能,可以帮助广大研究人员轻松快速地识别和检测目标C2服务器的相关信息。 C2-S…

【目标跟踪】相机运动补偿

文章目录 一、前言二、简介三、改进思路3.1、状态定义3.2、相机运动补偿3.3、iou和ReID融合3.4、改进总结 四、相机运动补偿 一、前言 目前 MOT (Multiple Object Tracking) 最有效的方法仍然是 Tracking-by-detection。今天给大家分享一篇论文 BoT-SORT。论文地址 &#xff0…

XCTF:warmup[WriteUP]

CtrlU查看页面源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&q…

【Matplotlib】figure方法之图形的保存

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;matplotlib &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进…

idea常用设置

1、内存优化 根据自己电脑本身的内存&#xff0c;对idea安装包里bin目录下的idea64.exe.vmoptions文件进行修改 -server -Xms256m -Xmx2048m -XX:MaxPermSize1024m -XX:ReservedCodeCacheSize256m -ea -Dsun.io.useCanonCachesfalse -Djava.Net.preferIPv4Stacktrue -Djsse.e…

STM32--HAL库定时器学习记录(易懂)--持续学习

一、什么是定时器 定时器就是计数器&#xff0c;通过计数完成一系列功能。 二、定时器的分类 定时器分为基本定时器、通用定时器、高级定时器。级别不同&#xff0c;功能不同。级别越高&#xff0c;功能越强。 三、定时器&#xff08;计数器&#xff09;三个重要寄存器 预分…

CSS:水平垂直居中

公共的 CSS 样式&#xff1a; .parent {width: 300px;height: 300px;background-color:#d0e4fe; }.child {width: 100px;height: 100px;background-color:orange; }HTML: <div class"parent"><div class"child"></div> </div>最…

C#之linq和lamda表达式GroupBy分组拼接字符串

文章目录 C#之linq和lamda表达式GroupBy分组拼接字符串业务需求核心代码调试 C#之linq和lamda表达式GroupBy分组拼接字符串 业务需求 点击提示信息&#xff0c;如&#xff1a;“售后单【SH001】序列号【001&#xff0c;002&#xff0c;006】&#xff1b;售后单【SH002】序列号…

华为自动驾驶干不过特斯拉?

文 | AUTO芯球 作者 | 李诞 什么&#xff1f; 华为的智能驾驶方案干不过蔚小理&#xff1f; 特斯拉的智能驾驶[FSD]要甩中国车企几条街&#xff1f; 这华为问界阿维塔刚刚推送“全国都能开”的城区“无图 NCA” 就有黑子来喷了 这是跪久了站不起来了吧 作为玩车14年&…

flask_django_python五金电商网络营销的可视化分析研究

前面部分完成了系统需求分析&#xff0c;了解到新闻数据业务方面的需求&#xff0c;系统主要分为用户管理、五金信息管理、在线留言、系统管理等功能。销的可视化研究&#xff0c;并对这些数据进行处理&#xff0c; 然后对这些数据进行可视化分析和统计。 Python 爬虫技术目前来…