【支持向量机(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文件,添加kapt配置项: 在模块目录下build.gradle.kt中增加 plugins {alias(libs.plugins.android.application)alias(libs.plugins.jetbrains.kotlin.android)// 增加该行alias(libs.plugins.jetbrains.kotl…...
时序数据库TDEngine
TDengine 是一款开源、高性能、云原生的时序数据库(Time Series Database, TSDB), 它专为物联网、车联网、工业互联网、金融、IT 运维等场景优化设计。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度&…...
jd-easyflow中inclusive的用法
在jd-easyflow中,inclusive通常与流程中的条件分支(conditions)配置相关,用于控制多个条件分支的执行逻辑。当conditionType设置为inclusive时,表示多个条件分支中的所有条件都会被评估,而不是像exclusive那…...
 
sqlmap图形化安装使用(附文件)
1.需要python环境,我这里就不教如何安装python环境了。 2.下载压缩包并且解压 3. 凭自己喜好选择大窗口小窗口 4.进入图形化界面后,1.输入url地址。2.选择要执行的操作。3.构造命令语句 5.点击一把梭,然后就可以发现出结果了 6. 对于喜欢自己…...
 
从二维到一维:动态规划矩阵问题的优化之道
动态规划中的矩阵问题是非常经典的应用场景,比如最小路径和问题。这类问题很自然地可以想到使用二维 dp 数组来求解。 我们定义: dp[i][j] 表示从矩阵的第 i行第 j列到右下角的最小路径和。 基本解法 求解过程从右下角开始,向左上角遍历&am…...
计算机视觉(CV):让机器看懂世界
引言 计算机视觉(Computer Vision, CV)是人工智能的重要领域,致力于让机器能够“看懂”世界。CV技术广泛应用于自动驾驶、医疗影像、安防监控和娱乐领域,正在改变我们的生活方式。 本文将从基本概念、技术方法、应用场景和发展方向…...
 
记录下,用油猴Tampermonkey监听所有请求,绕过seesion
油猴Tampermonkey监听所有请求,绕过seesion 前因后果脚本编写 前因后果 原因是要白嫖一个网站的接口,这个接口的页面入口被隐藏掉了,不能通过页面调用,幸好之前有想过逆向破解通过账号密码模拟登录后拿到token,请求该…...
服务器产品
一 存储产品 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(WindowsNAS) 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视频融合平台+应急布控球:打造城市安全监控新体系
在当今快速发展的智慧城市和数字化转型浪潮中,视频监控技术已成为提升公共安全、优化城市管理、增强应急响应能力的重要工具。EasyCVR视频监控平台以其强大的多协议接入能力和多样化的视频流格式分发功能,为用户提供了一个全面、灵活、高效的视频监控解决…...
Spark 中 RDD checkpoint 是通过启动两个独立的 Job 完成的。
在 Spark 中,RDD checkpoint 是通过启动两个独立的 Job 完成的。这两个 Job 分别用于生成 checkpoint 数据和更新依赖关系。下面从源码角度深入分析这个机制。 1. 为什么需要两个 Job? 当调用 RDD.checkpoint() 后: 第一个 Job:…...
如何下载TikTok视频没有水印
随着短视频平台的普及,TikTok(抖音国际版)成为了全球最受欢迎的社交媒体平台之一。它吸引了无数创作者发布自己的短视频内容,内容涵盖了舞蹈、搞笑、挑战、教程、旅行等各个方面。与此用户也常常希望能够下载自己喜欢的TikTok视频…...
天童美语:提升孩子的自信心的方法
每个孩子都渴望展翅高飞,但在成长的旅途中,难免会遇到风雨。不自信,就像一层薄雾,有时悄悄笼罩在孩子心头,阻碍了他们向阳而生的脚步。宁波天童教育认为,身为家长,我们的使命不仅是孩子的庇护伞…...
 
【网络编程】字节序:大端序和小端序
端序(Endianness),又称字节顺序,又称尾序,在计算机科学领域中,指存储器中或在数字通信链路中,组成多字节的字的字节的排列顺序。 在几乎所有的机器上,多字节对象都被存储为连续的字…...
 
视频融合×室内定位×数字孪生
随着物联网技术的迅猛发展,室内定位与视频融合技术在各行各业中得到了广泛应用。不仅能够提供精确的位置信息,还能通过实时视频监控实现全方位数据的可视化。 与此同时,数字孪生等技术的兴起为智慧城市、智慧工厂等应用提供了强大支持&#…...
 
RK3568平台开发系列讲解(platform虚拟总线驱动篇)注册 platform 驱动
🚀返回专栏总目录 文章目录 一、注册 platform 驱动二、platform_driver 结构体沉淀、分享、成长,让自己和他人都能有所收获!😄 一、注册 platform 驱动 platform_driver_register 函数用于在 Linux 内核中注册一个平台驱动程序。 下面是对该函数的详细介绍: 函数原型…...
Jmeter进阶篇(26)杀掉Tomcat的几种方法
📚Jmeter性能测试大全:Jmeter性能测试大全系列教程❤,这里有你想要的一切,欢迎订阅哦~ 📚前言 Tomcat 是一个广泛使用的开源 Java Servlet 容器,用于部署和运行 Java Web 应用程序。在我们进行压测测试过程中,很可能遇到被测系统崩溃,需要我们来操作一下子Tomcat的情…...
 
Solana 区块链的技术解析及未来展望 #dapp开发#公链搭建
随着区块链技术的不断发展和应用场景的扩展,性能和可拓展性成为各大公链竞争的关键因素。Solana(SOL)因其高吞吐量、低延迟和低成本的技术特性,在众多区块链项目中脱颖而出,被誉为“以太坊杀手”之一。本文将从技术层面…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
 
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
 
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
 
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
 
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
 
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
