关于支持向量机的一份介绍

在这篇文章中,我将介绍与支持向量机有关的东西,我们知道支持向量机主要分两类,就是线性支持向量机核支持向量机这两种(当然还有其他的,如多类支持向量机、 Nu-Support Vector Regression等),因此我将介绍它俩的联系与区别,但首先将会详细介绍它俩有关的知识及python实现。

一、 线性支持向量机

1.1 概念

线性支持向量机(Linear Support Vector Machine, Linear SVM)是一种用于分类和回归分析的监督学习模型,特别适用于数据在特征空间中是线性可分的情况。

线性SVM原本可用于进行二分类任务,但如果进行“一对多”等处理后,也可进行多分类任务。

下图就是iris数据集进行SVM后的图像:

1.2 数学模型

关于线性SVM的数学模型可以分为三来来看,分别是决策函数、原问题以及对偶问题。

(1)决策函数

线性SVM的决策函数是用来预测新输入样本所属类别的函数。在求解线性SVM的对偶问题之后,我们得到一系列拉格朗日乘子 αi,这些乘子用于构建最终的决策函数。其中拉格朗日乘子是对偶问题里的,暂且不谈。

我们知道SVM是用于划分类别的,所以我们可以用一个线性组合来描述:

我们将其记为:(W,b)。这样就会诞生一个空间中任意点到超平面的距离r。

然后我们假设这个超平面能正确分类样本,即方才的线性组合>0时,有yi = +1;反之小于0时,有yi = -1。

那么我将这个线性组合重写下就是:

如果用sign函数来表示,可以是这样:

(2)原问题

首先我们知道SVM问题就是一个优化问题,旨在数据线性可分的情况下去寻找一个最优的超平面将之划分,并使间隔最大化。

其中,距离超平面最近的几个训练样本使得其决策函数成立,它们就被称为是“支持向量”。而两个异类支持向量到超平面的和就是“间隔”。

为了间隔最大化,就有了原问题,所以可以写出以下式子:

(3)对偶问题

关于刚才的问题,我们要知道如果直接就用那些式子去找最优超平面会很复杂,所以我们我们需要对偶问题来帮助我们。而在对偶问题中就需要拉格朗日乘子,关于这个乘子,我们则需要了解下拉格朗日函数。

假如我们有目标函数f(x,y),我们要找到它的极值,但同时又存在一个g(x,y)=c(c为常数)来对其进行约束的话,我们就可以构造一个新函数来解决,这个新函数就是拉格朗日函数,表达式如下:

其中的λ(lambda)就是拉格朗日乘子。

而要解决这个式子就需要让其梯度为0,如下:

然后有:

最后就可分别求得x、y、λ的值了。

那么我们就来求取在对偶条件下的线性SVM的模型:

我们已知拉格朗日函数的形式,那么我们将相应的函数带入即可。首先是目标函数,因为我们要求取一个最优超平面,所以将刚才的原问题中的模型带入到f(x,y)的位置;然后是约束函数,因为要让间隔最大化,所以需要约束条件如此确保间隔的最大化;接下来是常数C,一般在没有先验条件的前提下,我们都会使用1作为默认值。(当C越大,模型越倾向于减少分类错误,C越小,模型的泛化能力越强)

那么就有了最后的模型:

1.3 python实现
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载Iris数据集
iris = load_iris()
X = iris.data[:, :2]  # 只取前两个特征:花萼长度和花萼宽度
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 创建SVM模型
svm = SVC(kernel='linear', C=1)
# 训练模型
svm.fit(X_train, y_train)
y_pre = svm.predict(X_test)
accuracy = accuracy_score(y_test, y_pre)
print("Accuracy is: {}".format(accuracy))# 绘制决策边界
def plot_decision_boundary(model, X, y):# 创建网格x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),np.arange(y_min, y_max, 0.01))# 预测网格中的类别Z = model.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)# 绘制背景色plt.contourf(xx, yy, Z, alpha=0.8)# 绘制训练数据点markers = ['o', 's', '^']for i, label in enumerate(np.unique(y)):plt.scatter(X[y == label, 0], X[y == label, 1], marker=markers[i], label=iris.target_names[label])# 绘制决策边界plt.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], linestyles=['--', '-', '--'])# 图像设置plt.title('Iris Dataset with SVM Decision Boundary')plt.xlabel('Sepal Length (cm)')plt.ylabel('Sepal Width (cm)')plt.legend()plt.show()# 绘制决策边界
plot_decision_boundary(svm, X, y)

二、 核支持向量机

1.1 概念

核SVM利用核函数(Kernel Function)将输入数据映射到一个更高维的空间,在这个高维空间中,原本非线性可分的数据变得线性可分。

同样的,我给出一个用iris进行SVM分类后的图像,如下图:(其代码随后给出)

1.2 数学模型

我们来看核SVM的数学模型,其基本形式与线性的十分相似,我们令Φ(x)来表示将x映射后的特征向量,于是之前的模型就发生了改变,便成为:f(x) = w^T\phi (x)+b的形式。然后其对偶问题也就变为:

最后经过一些重写、化简等就变为:

f(x)=w^T\phi (x)+b \\=\sum_{i=1}^{m} \alpha i yi\phi (x)+b\\=\sum_{i=1}^{m}\alpha i yi\kappa (x,xi)+b

而这里的函数κ()就是“核函数”(kernal function)。

而关于核函数其实存在多种选择,因为我自己也对其不够了解,所以只在此给出西瓜书上的常用核函数表,如下:

1.3 联系

在我们初步了解二者的概念后,我们就可以知道,其实KSVM(核SVM)就是线性SVM在原本处理不了的非线性数据上做出的一个拓展,旨在增加维度而能实现让SVM进行分类。

1.4 区别

适用范围:在线性SVM中,它适用于处理线性可分的数据集,即可以通过一个超平面(在二维空间中是一条直线,在高维空间中是一个超平面)来分隔不同类别的数据点;而KSVM中,它适用于处理非线性可分的数据集,即数据不能通过一个简单的超平面来分隔。在这种情况下,数据可能需要被映射到一个更高维的空间,才能找到一个合适的分隔超平面。

计算复杂度:线性SVM的复杂度相对较低,而KSVM因为核函数的缘故,计算复杂度较高。

实际应用:在线性可分数据集上,线性SVM通常比KSVM更快并且更简单。例如,在文本分类或一些简单的图像识别任务中,数据可能是线性可分的;在非线性可分数据集上,KSVM能够更好地捕捉数据中的复杂关系。例如,在手写数字识别、生物信息学等领域,数据通常是非线性可分的,KSVM能够提供更高的准确率。

1.5 python代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.svm import SVC
from mpl_toolkits.mplot3d import Axes3D# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data[:, :3]  # 使用前三个特征
y = iris.target
# 使用线性核的支持向量机
svm = SVC(kernel='linear')
svm.fit(X, y)
# 创建3D图形
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')  # 使用add_subplot代替Axes3D
ax.view_init(elev=-152, azim=-26)  # 设置视角
# 掩码
mask_0 = y == 0
mask_1 = y == 1
mask_2 = y == 2
# 绘制散点图
ax.scatter(X[mask_0, 0], X[mask_0, 1], X[mask_0, 2], c='b', s=60, label="Setosa")
ax.scatter(X[mask_1, 0], X[mask_1, 1], X[mask_1, 2], c='r', marker='^', s=60, label="Versicolour")
ax.scatter(X[mask_2, 0], X[mask_2, 1], X[mask_2, 2], c='g', marker='s', s=60, label="Virginica")
# 设置坐标轴标签
ax.set_xlabel("Sepal length")
ax.set_ylabel("Sepal width")
ax.set_zlabel("Petal length")
# 添加图例
ax.legend()
# 绘制决策平面
w = svm.coef_[0]
a = -w[0] / w[2]
b = -w[1] / w[2]
xx, yy = np.meshgrid(np.linspace(X[:, 0].min(), X[:, 0].max(), 50),np.linspace(X[:, 1].min(), X[:, 1].max(), 50))
zz = (-svm.intercept_[0] - a * xx - b * yy) / w[2]# 画出平面
surf = ax.plot_surface(xx, yy, zz, rstride=1, cstride=1, color='none',alpha=0.3, edgecolor='darkblue')
# 显示图形
plt.show()

三、 补足

此外,我们会发现在分类时偶尔会有些数据点分类错误或是在间隔内,那么我们就可以称它为“软间隔”,那么我可以在这里完整描述下关于软间隔的含义:它适用于不完全线性可分的数据集,允许一定的误差。并通过调整C来控制惩罚程度,以达到最好的泛化能力。而于此相对的,硬间隔的含义就是:适用于 完全线性可分的数据集,不允许任何训练样本出现在间隔内或是被错误地分类。

因为在现实中大多不能做到硬间隔的分类,所以我们我们需要软间隔,更需要关于它而对原有的SVM模型进行修改,比如加入损失函数,引入松弛变量等,这样就能得到常说的“软间隔SVM”。

SVM处了能处理分类问题还能进行回归,这样就是“支持向量回归”了,即Support Vector Regression。

关于SVM的东西还有很多,我将在之后继续介绍。

此上

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

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

相关文章

docker存储

docker分层结构 如图所示,容器是由最上面可读可写的容器层,以及若干个只读镜像层组成,创建容器时,容器中的 数据都来自镜像层。这样的分层机构最大的特点是写时复制: 1、容器中新生成的数据会直接存放在容器层&#xf…

产品经理入门攻略:如何从零开始成为产品经理

“人人都是产品经理”这句话相信你一定听过。 作为现在的热门职业,许多朋友也在心里埋下了一颗想要成为产品经理的种子。 产品经理的工作其实没有传说中的那么“高大上”,甚至可以说大多数时候是枯燥且无聊的,需要不断地对数据进行分析&…

第十一章 【后端】商品分类管理微服务(11.5)——增强响应

11.5 增强响应 在前后端分离的开发模式下,我们一般会统一后端的响应格式,比如自定义 Response 结构,但每个开发者可能会封装各自的 Response 结构,造成不一致,因此我们需要将响应格式统一起来,定义一个统一的标准响应格式。 11.5.1 创建响应模块 新建 yumi-etms-respon…

高效实现业务流程管理的技术——低代码解决方案

一、低代码平台概述 低代码平台允许用户通过可视化的界面设计和配置应用程序,而无需深入编程知识。这种平台通常包括拖拽式的组件、流程图设计工具、以及预设的功能模块,使得业务用户和开发者都能快速构建和修改应用程序。 二、低代码平台在 BPM 中的优…

动手学深度学习PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…

ubuntu20.04安装cudnn

先登入账号 网址:https://developer.nvidia.com/cudnn 选择ubuntu20.04 x86_64(Deb) 在下载好文件的文件夹下打开终端 sudo apt-get install zlib1gsudo dpkg -i cudnn-local-repo-${distro}-8.x.x.x_1.0-1_amd64.debsudo cp /var/cudnn-lo…

【终极对决】Ping32 vs 绿盾:十大维度深度剖析,谁是企业数据安全的守护神?

在信息安全领域,企业对数据保护的需求不断升级。Ping32与绿盾加密作为两款备受关注的数据保护软件,各具特色。本文将从十大维度深度剖析这两款软件,帮助企业选择最适合自己的数据安全解决方案。 1. 加密算法 Ping32 Ping32采用了多种高级加…

Tiny Universe - Llama3架构

Llama3和Llama2和Qwen2的整体架构相似,本篇文章主要讲解它们的一些主要不同点。 关于Qwen2架构可参考 Qwen2架构 学习笔记 llama3区别于llama2在模型层面的区别主要体现在全模型使用GQA。 基础知识 MLP MLP(Multi-Layer Perceptron)多层感…

有毒有害气体检测仪的应用和性能_鼎跃安全

随着现代工业的不断发展和扩张,越来越多的企业涉及到有毒有害气体的生产、使用和处理。工业规模的扩大导致有毒有害气体的排放量增加,同时也增加了气体泄漏的风险。在发生火灾、爆炸或危险化学品泄漏等紧急事件时,救援人员需要迅速了解现场的…

生产管理电子看板如何助力工厂数字化转型

在当今快速发展的工业环境中,数字化转型已成为提升企业竞争力的关键因素之一。作为工厂管理的重要工具,生产管理电子看板在实现数字化转型方面发挥了不可或缺的作用。电子看板不仅优化了生产流程,还提高了决策效率,为企业带来了显…

什么是 IP 地址信誉?5 种改进方法

IP 地址声誉是营销中广泛使用的概念。它衡量 IP 地址的质量,这意味着您的电子邮件进入垃圾邮件或被完全阻止发送的可能性。 由于每个人都使用专用电子邮件提供商而不是直接通过 IP 地址进行通信,因此,这些服务可以跟踪和衡量发件人的行为质量…

heic图片怎么转化为jpg?教大家八种常见的heic转jpg方法!

heic图片怎么转化为jpg?谈及HEIC格式,这一新兴的图像编码方式以其卓越的压缩效率著称,它巧妙地运用了先进的编码技术,大幅缩减了图片占用的存储空间,然而,这枚科技果实也伴随着其独特的挑战,首要…

EMQX MQTT 服务器启用 SSL/TLS 安全连接,使用8883端口

1.提前下载安装openssl 2.新建openssl文件打开在命令行操作 3.按照下面的操作进行 MQTT 安全 作为基于现代密码学公钥算法的安全协议,TLS/SSL 能在计算机通讯网络上保证传输安全,EMQX 内置对 TLS/SSL 的支持,包括支持单/双向认证、X.509 证…

无法找到iutils.dll要怎么解决?四种修复iutils.dll的操作你知道么

当你收到“无法找到iutils.dll”的错误提示时,这表明你的系统缺失了一个关键的动态链接库文件,这可能阻止相关软件的正常启动和运行。面对这类问题,有多种方法可以帮助你追踪并恢复丢失的iutils.dll文件,从而使受影响的程序能够正…

Qt_布局管理器

目录 1、QVBoxLayout垂直布局 1.1 QVBoxLayout的使用 1.2 多个布局管理器 2、QHBoxLayout水平布局 2.1 QHBoxLayout的使用 2.2 嵌套的Layout 3、QGridLayout网格布局 3.1 QGridLayout的使用 3.2 设置控件大小比例 4、QFormLayout 4.1 QFormLayout的使用 5、…

基于Benes网络的SIMD同态密文任意重排

摘要 RLWE的密文使用了SIMD后极大的增加的同态加密的效率。同态加密通过加密一个向量,实现对明文的快速加法和乘法。然而,加密为一个密文的向量的内部元素之间,无法高效的操作。 如一个密文加密了 [ a , b , c ] [a,b,c] [a,b,c]&#xff0c…

arm64 中断处理流程

arm64 中断处理学习笔记 内核版本:5.15 平台:ARM64 汇编入口 中断产生的起始地点,中断向量表:arch/arm64/kernel/entry.S arm64 一共只有4种中断,sync为同步异常包含:(系统调用、数据中止、指令中止、栈…

YOLOv10轻量化快速涨点之改进AKConv

目录 1,什么是AKConv? 2,如何使用AKConv使YOLOv10快速长点? 2.1,在ultralytics-main/ultralytics/nn/modules/conv.py里面添加AKConv类 2.2,ultralytics-main/ultralytics/nn/modules/conv.py添加如下 2.3 在E:\czc\YOLOv10\ultralytics-main\ultralytics\nn\tasks.p…

闪回科技二度冲刺港股,深陷盈利困境,雷军看走眼了?

一台手机的流通循环,起于产线,止于废弃。 废弃是消费电子产品生命周期的最后一步,但是过去没有产业链玩家会把这一步骤当作产业链的一环。而商业机会恰恰藏在这样“反常识”的领域。 中国循环经济协会的数据表明,当前国内废旧手…

扒吉他谱的基本方法 扒吉他谱软件哪个好用

在音乐的浩瀚海洋中,吉他以其独特的魅力成为了众多音乐爱好者的首选伴侣。而学会扒谱,则如同掌握了一把开启音乐宝库的钥匙,不仅能够深化对音乐的理解,还能激发个人创作的灵感。扒谱,即通过耳朵聆听,将听到…