当前位置: 首页 > news >正文

【支持向量机(SVM)】:相关概念及API使用

文章目录

  • 1 SVM相关概念
    • 1.1 SVM引入
      • 1.1.1 SVM思想
      • 1.1.2 SVM分类
      • 1.1.3 线性可分、线性和非线性的区分
    • 1.2 SVM概念
    • 1.3 支持向量概念
    • 1.4 软间隔和硬间隔
    • 1.5 惩罚系数C
    • 1.6 核函数
  • 2 SVM API使用
    • 2.1 LinearSVC API 说明
    • 2.2 鸢尾花数据集案例
    • 2.3 惩罚参数C的影响

1 SVM相关概念

1.1 SVM引入

1.1.1 SVM思想

看一个故事,故事是这样子的:

在很久以前的情人节,一位大侠要去救他的爱人,但魔鬼需要大侠先攻克他设置的防线,于是和他玩了一个游戏game。

魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。”
在这里插入图片描述

于是大侠这样放,干的不错?

在这里插入图片描述

然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。

在这里插入图片描述

大侠苦思冥想似乎记得学过SVM技术,于是就采用SVM试试。

这里的 SVM就试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。
在这里插入图片描述

现在即使魔鬼放了更多的球,棍仍然是一个好的分界线。
在这里插入图片描述
​ 在SVM 工具箱中有另一个更加重要的 trick(招式) 。 魔鬼看到大侠已经学会了前面一个trick,于是魔鬼给了大侠一个新的挑战。
在这里插入图片描述
​ 现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然又想起了放大招—SVM。像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠练就的轻功,大侠抓起一张纸,插到了两种球的中间。样本在二维空间线性不可分,二维空间总解决不掉,将样本映射到更高维的空间,需要采用核函数。

在这里插入图片描述

​ 现在,从魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。
在这里插入图片描述

最后,魔鬼被折服了

再之后,无聊的大人们,把这些球叫做 「data」 ,把棍子叫做 「classifier」 , 最大间隙trick 叫做 「optimization」 , 拍桌子叫做 「kernelling」 , 那张纸叫做 「hyperplane」。

概念:

  • 超平面:划分类别的边界
  • 类别之间的间隔:样本到超平面的距离
  • 支持向量:与超平面距离最近的向量(样本)
  • 核函数:将样本映射到更高维空间的函数

1.1.2 SVM分类

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

(1)线性可分支持向量机(硬间隔支持向量机):

当训练数据线性可分的时候,通过硬间隔最大化,学习得到一个线性可分支持向量机。在分类间隔中,没有划分错误的样本。

(2)线性支持向量机(软间隔支持向量机):

当训练数据近似线性可分时,通过软间隔最大化,学习一个线性支持向量机。在分类间隔中,允许一部分样本划分错误。

(3)非线性支持向量机:

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

1.1.3 线性可分、线性和非线性的区分

第一个图是线性可分,我们借助线性可分支持向量机完成分类。第二个图是不能完全线性可分,我们通过线性支持向量机解决。第三个图是完全线性不可分的,需要借助非线性支持向量机分类。

在这里插入图片描述
通过上述描述,我们抽象其中的蓝球和红球,并将两种颜色的球转化为二维平面上的点坐标,篮球映射为黑球,红球映射为白球。使用直线H1,H2和H3分类这两类颜色的球,图中的H1不能很好的区分黑球和白球,可以看到H2和H3都能很好的区分这两种颜色的球。

在这里插入图片描述

区分数据集:

  • H2和H3这样的直线一样可以区分两种颜色的球体有很多种条直线,虽然他们都能够很好的分类已经存在的黑球和白球,也就是我们之前讲到的训练集分类效果很好,训练误差为0。

  • 但是不能保证这些超平面在未知的实例上运行效果会很好,和上面魔鬼和大侠的例子一样,当魔鬼放置更多的黑球或白球的时候,我们提到的这些平面还能很好的让这些未知的球得到很好的分类吗?

  • 考虑泛化误差的影响。 根据在检验样本上的运行效果,分类器必须从这些分类超平面中选择一个来表示它的决策边界

  • 满足这个条件的很多,但是使得泛化误差最小的条件就是边际margin最大的情况。如左图的边际不及右边的边际margin大,我们选择右边的图作为边界最好的划分。因为 在有新的点出现的时候左边图的边际会错误分类一些点,而右侧就能很好的分类。
    在这里插入图片描述

1.2 SVM概念

SVM全称是supported vector machine(支持向量机),即寻找到一个超平面使样本分成两类,并且间隔最大。
在这里插入图片描述
超平面最大间隔
在这里插入图片描述

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

原因:因为最大边缘超平面可以使得我们的训练误差很小的情况下,当有新数据的到来时也能使得测试误差达到最小。

1.3 支持向量概念

所有坐落在边际两边的超平面上的点被称作” 支持向量 (support vectors)"。

如下图,这两个特殊点是支撑我们构建最大边缘超平面的。这些点所在的边缘超平面上的点,称为支持向量。下图中红色的点对右图中的红色的直线或平面有支撑作用,这些点是关键点。而其点对最优超平面都没有影响。

在这里插入图片描述

1.4 软间隔和硬间隔

  • 硬间隔指的是让所有的样本都不在最大间隔之间,并位于正确的一边,这就是硬间隔。如果出现异常值、或者样本不能线性可分,此时硬间隔无法实现。
    在这里插入图片描述
    在这里插入图片描述
  • 软间隔指的是我们容忍一部分样本在最大间隔之内,甚至在错误的一边。相对来说,软间隔可以应用在一些线性不可分的场景。
    • 目标是尽可能在保持间隔宽阔和限制间隔违例之间找到良好的平衡。
    • 通过惩罚系数C来控制这个平衡:C值越小,则间隔越宽,但是间隔违例也会越多。
      在这里插入图片描述

1.5 惩罚系数C

在硬间隔的情况下,我们只考虑如何使得间隔达到最大。在软间隔的情况,我们即要考虑最大化间隔,也要考虑到那些限制间隔违例的样本带来的损失。

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

在这里插入图片描述

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

在这里插入图片描述

1.6 核函数

核函数将原始输入空间映射到新的特征空间,使得原本线性不可分的样本在核空间可分
在这里插入图片描述

2 SVM API使用

2.1 LinearSVC API 说明

class sklearn.svm.LinearSVC(C=1.0)

  • C:惩罚系数,类似于线性回归中的正则化系数

LinearSVC API的使用方式:

from sklearn.svm import LinearSVC
mysvc = LinearSVC(C=30)
mysvc.fit(X_standard, y)
print(mysvc.score(X_standard, y))

2.2 鸢尾花数据集案例

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score
from plot_util import plot_decision_boundary# 1.加载数据
X,y=load_iris(return_X_y=True)# print(y.shape)
# print(X.shape)# 选择前0和1类的前两个特征
x = X[y<2,:2  ]
# 选择 0和1类
y = y[y<2]
# print(y.shape)# 绘制原数据图像分布
plt.scatter(x[y==0,0],x[y==0,1],c='red')
plt.scatter(x[y==1,0],x[y==1,1],c='blue')
plt.show()# 2.数据的预处理
# 进行数据标准化
transform = StandardScaler()
x_tran=transform.fit_transform(x)# 3.模型训练
# 设置惩罚系数
model=LinearSVC(C=10)
model.fit(x_tran,y)
y_pred = model.predict(x_tran)print(accuracy_score(y_pred,y))# 4.可视化
plot_decision_boundary(model,axis=[-3,3,-3,3])
plt.scatter(x_tran[y==0,0],x_tran[y==0,1],c='red')
plt.scatter(x_tran[y==1,0],x_tran[y==1,1],c='blue')
plt.show()

鸢尾花数据展示
在这里插入图片描述
LinearSVC分类边界
在这里插入图片描述

2.3 惩罚参数C的影响

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score
from plot_util import plot_decision_boundary,plot_decision_boundary_svc# 1.加载数据
X,y=load_iris(return_X_y=True)# print(y.shape)
# print(X.shape)
x = X[y<2,:2]
y = y[y<2]
# print(y.shape)plt.scatter(x[y==0,0],x[y==0,1],c='red')
plt.scatter(x[y==1,0],x[y==1,1],c='blue')
plt.show()# 2.数据的预处理
transform = StandardScaler()
x_tran=transform.fit_transform(x)# 3.模型训练
model=LinearSVC(C=30)
model.fit(x_tran,y)
y_pred = model.predict(x_tran)print(accuracy_score(y_pred,y))# 4.可视化
plot_decision_boundary_svc(model,axis=[-3,3,-3,3])
plt.scatter(x_tran[y==0,0],x_tran[y==0,1],c='red')
plt.scatter(x_tran[y==1,0],x_tran[y==1,1],c='blue')
plt.show()# 3.模型训练
model=LinearSVC(C=0.01)
model.fit(x_tran,y)
y_pred = model.predict(x_tran)print(accuracy_score(y_pred,y))# 4.可视化
plot_decision_boundary_svc(model,axis=[-3,3,-3,3])
plt.scatter(x_tran[y==0,0],x_tran[y==0,1],c='red')
plt.scatter(x_tran[y==1,0],x_tran[y==1,1],c='blue')
plt.show()

C = 0.01
在这里插入图片描述
C = 10
在这里插入图片描述

相关文章:

【支持向量机(SVM)】:相关概念及API使用

文章目录 1 SVM相关概念1.1 SVM引入1.1.1 SVM思想1.1.2 SVM分类1.1.3 线性可分、线性和非线性的区分 1.2 SVM概念1.3 支持向量概念1.4 软间隔和硬间隔1.5 惩罚系数C1.6 核函数 2 SVM API使用2.1 LinearSVC API 说明2.2 鸢尾花数据集案例2.3 惩罚参数C的影响 1 SVM相关概念 1.1…...

Android kotlin之配置kapt编译器插件

配置项目目录下的gradle/libs.versions.toml文件&#xff0c;添加kapt配置项&#xff1a; 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…...

时序数据库TDEngine

TDengine 是一款开源、高性能、云原生的时序数据库&#xff08;Time Series Database, TSDB&#xff09;, 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓存、流式计算、数据订阅等系统功能&#xff0c;能大幅减少系统设计的复杂度&…...

jd-easyflow中inclusive的用法

在jd-easyflow中&#xff0c;inclusive通常与流程中的条件分支&#xff08;conditions&#xff09;配置相关&#xff0c;用于控制多个条件分支的执行逻辑。当conditionType设置为inclusive时&#xff0c;表示多个条件分支中的所有条件都会被评估&#xff0c;而不是像exclusive那…...

sqlmap图形化安装使用(附文件)

1.需要python环境&#xff0c;我这里就不教如何安装python环境了。 2.下载压缩包并且解压 3. 凭自己喜好选择大窗口小窗口 4.进入图形化界面后&#xff0c;1.输入url地址。2.选择要执行的操作。3.构造命令语句 5.点击一把梭&#xff0c;然后就可以发现出结果了 6. 对于喜欢自己…...

从二维到一维:动态规划矩阵问题的优化之道

动态规划中的矩阵问题是非常经典的应用场景&#xff0c;比如最小路径和问题。这类问题很自然地可以想到使用二维 dp 数组来求解。 我们定义&#xff1a; dp[i][j] 表示从矩阵的第 i行第 j列到右下角的最小路径和。 基本解法 求解过程从右下角开始&#xff0c;向左上角遍历&am…...

计算机视觉(CV):让机器看懂世界

引言 计算机视觉&#xff08;Computer Vision, CV&#xff09;是人工智能的重要领域&#xff0c;致力于让机器能够“看懂”世界。CV技术广泛应用于自动驾驶、医疗影像、安防监控和娱乐领域&#xff0c;正在改变我们的生活方式。 本文将从基本概念、技术方法、应用场景和发展方向…...

记录下,用油猴Tampermonkey监听所有请求,绕过seesion

油猴Tampermonkey监听所有请求&#xff0c;绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口&#xff0c;这个接口的页面入口被隐藏掉了&#xff0c;不能通过页面调用&#xff0c;幸好之前有想过逆向破解通过账号密码模拟登录后拿到token&#xff0c;请求该…...

服务器产品

一 存储产品 3.1 3PAR 3.2 X10000 3.3 SAN Switch 3.4 Nimble 3.5 SimpliVity 3.6 XP 3.7 MSA 3.8 StoreOnce 3.9 StoreEver 3.10 StoreBlade 3.11 StoreEasy&#xff08;WindowsNAS&#xff09; 3.12 JBOD 3.13 CB 二 服务器产品 4.1 红牌服务器 4.1.1 红牌…...

pyhton django web集群基于linux定时任务

基于django management/commands目录下的脚本 from django.core.management import BaseCommand import logging import uuid from pia.utils.cache import reset_redis_expire from pia.utils.reids_key import TASK_KEYlogging logging.getLogger(task)""" …...

探索 Python 字典的奥秘:Future 对象为何能成为字典的键?

本质在于作为字典的key能不能执行hash(key) 问题 import concurrent.futuresdef task(n):return n * n# 创建一个线程池 with concurrent.futures.ThreadPoolExecutor() as executor:# 提交任务并获取 Future 对象future_to_num {executor.submit(task, i): i for i in rang…...

多品牌摄像机视频平台EasyCVR视频融合平台+应急布控球:打造城市安全监控新体系

在当今快速发展的智慧城市和数字化转型浪潮中&#xff0c;视频监控技术已成为提升公共安全、优化城市管理、增强应急响应能力的重要工具。EasyCVR视频监控平台以其强大的多协议接入能力和多样化的视频流格式分发功能&#xff0c;为用户提供了一个全面、灵活、高效的视频监控解决…...

Spark 中 RDD checkpoint 是通过启动两个独立的 Job 完成的。

在 Spark 中&#xff0c;RDD checkpoint 是通过启动两个独立的 Job 完成的。这两个 Job 分别用于生成 checkpoint 数据和更新依赖关系。下面从源码角度深入分析这个机制。 1. 为什么需要两个 Job&#xff1f; 当调用 RDD.checkpoint() 后&#xff1a; 第一个 Job&#xff1a;…...

如何下载TikTok视频没有水印

随着短视频平台的普及&#xff0c;TikTok&#xff08;抖音国际版&#xff09;成为了全球最受欢迎的社交媒体平台之一。它吸引了无数创作者发布自己的短视频内容&#xff0c;内容涵盖了舞蹈、搞笑、挑战、教程、旅行等各个方面。与此用户也常常希望能够下载自己喜欢的TikTok视频…...

天童美语:提升孩子的自信心的方法

每个孩子都渴望展翅高飞&#xff0c;但在成长的旅途中&#xff0c;难免会遇到风雨。不自信&#xff0c;就像一层薄雾&#xff0c;有时悄悄笼罩在孩子心头&#xff0c;阻碍了他们向阳而生的脚步。宁波天童教育认为&#xff0c;身为家长&#xff0c;我们的使命不仅是孩子的庇护伞…...

【网络编程】字节序:大端序和小端序

端序&#xff08;Endianness&#xff09;&#xff0c;又称字节顺序&#xff0c;又称尾序&#xff0c;在计算机科学领域中&#xff0c;指存储器中或在数字通信链路中&#xff0c;组成多字节的字的字节的排列顺序。 在几乎所有的机器上&#xff0c;多字节对象都被存储为连续的字…...

视频融合×室内定位×数字孪生

随着物联网技术的迅猛发展&#xff0c;室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息&#xff0c;还能通过实时视频监控实现全方位数据的可视化。 与此同时&#xff0c;数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…...

RK3568平台开发系列讲解(platform虚拟总线驱动篇)注册 platform 驱动

🚀返回专栏总目录 文章目录 一、注册 platform 驱动二、platform_driver 结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 一、注册 platform 驱动 platform_driver_register 函数用于在 Linux 内核中注册一个平台驱动程序。 下面是对该函数的详细介绍: 函数原型…...

Jmeter进阶篇(26)杀掉Tomcat的几种方法

📚Jmeter性能测试大全:Jmeter性能测试大全系列教程❤,这里有你想要的一切,欢迎订阅哦~ 📚前言 Tomcat 是一个广泛使用的开源 Java Servlet 容器,用于部署和运行 Java Web 应用程序。在我们进行压测测试过程中,很可能遇到被测系统崩溃,需要我们来操作一下子Tomcat的情…...

Solana 区块链的技术解析及未来展望 #dapp开发#公链搭建

随着区块链技术的不断发展和应用场景的扩展&#xff0c;性能和可拓展性成为各大公链竞争的关键因素。Solana&#xff08;SOL&#xff09;因其高吞吐量、低延迟和低成本的技术特性&#xff0c;在众多区块链项目中脱颖而出&#xff0c;被誉为“以太坊杀手”之一。本文将从技术层面…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

用鸿蒙HarmonyOS5实现国际象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码&#xff0c;使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...

【Java】Ajax 技术详解

文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...