支持向量机(SVM)基础教程

一、引言

        支持向量机(Support Vector Machine,简称SVM)是一种高效的监督学习算法,广泛应用

于分类和回归分析。SVM以其强大的泛化能力、简洁的数学形式和优秀的分类效果而备受机器学

习领域的青睐。

二、SVM基本原理

        2.1 最大间隔分类器

        SVM的核心目标是寻找一个最优的超平面,该超平面能够将不同类别的样本尽可能完美地分

开,并且最大化分类间隔。分类间隔是指超平面到最近的数据点的距离,这个距离越大,模型的泛

化能力通常越强。

        2.2 函数间隔与几何间隔

        函数间隔:一个标量,表示超平面正确分类样本的程度。

                函数间隔越大,表示分类器的信心越强。

        几何间隔:函数间隔的归一化形式,考虑了超平面的法向量。

                几何间隔更直观地反映了数据点到超平面的实际距离。

        2.3 支持向量

        支持向量是那些位于分类间隔边缘的数据点。

        在最优超平面确定后,只有支持向量对超平面的位置有影响,而其他数据点则不会影响超平

面的位置。

三、SVM算法步骤

        3.1 数据预处理

        在应用SVM之前,通常需要对数据进行预处理,包括特征缩放、去除缺失值、异常值处理

等,以确保算法的性能不受数据尺度的影响。

        3.2 构建优化问题

        SVM的优化问题可以表述为

        3.3 求解优化问题     

        3.4 计算超平面参数

        3.5 构建分类器

四、SVM应用实例

        下面是一个使用Python和scikit-learn库实现SVM分类器的示例。

        4.1 导入数据
 

import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasets# 导入数据集X, y = datasets.make_blobs(n_samples=50, centers=2, random_state=6)

        4.2 训练SVM模型
 

from sklearn.svm import SVCfrom sklearn.preprocessing import StandardScaler# 数据归一化scaler = StandardScaler()X_scaled = scaler.fit_transform(X)# 创建SVM模型clf = SVC(kernel='linear', C=1.0)# 训练模型clf.fit(X_scaled, y)

        4.3 可视化分类结果

# 绘制数据点plt.scatter(X_scaled[:, 0], X_scaled[:, 1], c=y, cmap=plt.cm.Paired,edgecolors='k')# 绘制超平面ax = plt.gca()xlim = ax.get_xlim()ylim = ax.get_ylim()xx = np.linspace(xlim[0], xlim[1], 30)yy = np.linspace(ylim[0], ylim[1], 30)YY, XX = np.meshgrid(yy, xx)xy = np.vstack([XX.ravel(), YY.ravel()]).TZ = clf.decision_function(xy).reshape(XX.shape)ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])# 绘制支持向量ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100,facecolors='none', edgecolors='k')plt.title('SVM with Linear Kernel')plt.show()

        4.4 结果分析

        运行上述代码,我们可以得到如下分类结果图:

        从图中可以看出,SVM成功地将两类数据分开,并且找到了最大间隔的超平面。

        黑色实线表示最优超平面,黑色虚线表示分类间隔。

        红色和蓝色点表示不同类别的样本点,黑色圆圈表示支持向量。

五、SVM的核技巧

        当数据不是线性可分时,SVM可以通过引入核技巧来处理非线性问题。

        核技巧允许SVM在原始特征空间中非线性地映射数据到高维特征空间,然后在高维空间中寻

找最优超平面。

        5.1 常见的核函数       

        5.2 选择合适的核函数

        选择合适的核函数对于SVM的性能至关重要。

        通常,我们可以通过交叉验证和网格搜索来找到最优的核函数和参数。

六、SVM参数选择

        在实现支持向量机(SVM)时,参数的选择对模型的性能有着决定性的影响。

        下面是一些关键的SVM参数及其详细说明:

        1. 正则化参数 C

        定义:C是SVM中的一个正则化参数,它控制着模型对误分类的容忍度。

        在SVM中,我们希望找到一个既能最大化分类间隔又能最小化误分类的决策边界。

        作用

        当C值较大时,模型会尝试将所有训练样本正确分类,这可能会导致模型过于复杂,从而产生

过拟合。过拟合意味着模型在训练数据上表现很好,但在未见过的新数据上表现不佳。

        当C值较小时,模型允许更多的误分类,这可能会导致欠拟合。欠拟合的模型过于简单,无法

捕捉数据的真实结构。

        调整建议

                如果训练误差远低于验证误差,可能是因为模型过拟合,此时应减小C值。

                如果训练误差和验证误差都很高,可能是因为模型欠拟合,此时应增大C值。

                通常,通过交叉验证来选择合适的C值,以找到泛化能力最强的模型。

2. 核函数参数

        定义:核函数参数决定了核函数的形状和映射方式,这些参数对于处理非线性问题至关重

要。

        常见的核函数参数有:

        调整建议

        核函数参数的选择通常依赖于数据集的特性。

        可以通过网格搜索和交叉验证来找到最优的参数组合。 

        3. 核函数类型

        定义:核函数类型决定了数据在特征空间中的映射方式。

        选择合适的核函数

                对于线性可分的数据,线性核函数通常是最佳选择,因为它简单且计算效率高。

                对于非线性问题,可以选择多项式核、RBF核或sigmoid核。

                选择核函数时,需要考虑数据的分布和问题的复杂性。

        通常,RBF核是一个通用的选择,因为它可以映射到无限维的特征空间。

七、总结

        本文详细介绍了支持向量机(SVM)的基本原理、算法步骤、核技巧以及在Python中的实

现。

        SVM是一种强大的机器学习算法,适用于多种分类和回归问题。但是SVM的性能受核函数和

参数选择的影响较大,因此在实际应用中,需要根据具体问题进行适当的调整和优化。

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

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

相关文章

QT使用qss控制样式实现动态换肤

文章目录 设计QSS样式表动态加载QSS文件主函数调用QT提供了一种非常灵活的方式来使用QSS(Qt Style Sheet,类似于 CSS 的样式表),实现界面的动态换肤功能。QSS可以改变Qt应用程序中几乎所有可视组件的外观,包括颜色、字体、边框等。下面介绍一下如何通过QSS实现动态换肤。 设…

YOLO11改进|注意力机制篇|引入上下文锚注意力机制CAA

目录 一、【CAA】注意力机制1.1【CAA】注意力介绍1.2【CAA】核心代码 二、添加【CAA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【CAA】注意力机制 1.1【CAA】注意力介绍 CAA注意力机制的结构图如下,下面根据…

51单片机的水质检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器ph传感器浑浊度传感器蓝牙继电器LED、按键和蜂鸣器等模块构成。适用于水质监测系统,含检测和调整水温、浑浊度、ph等相似项目。 可实现功能: 1、LCD1602实时显示水温、水体ph和浑浊度 2、温…

PYTHON实现HTTP request的一些有用的函数

前言 我们知道,当需要设计一个程序和服务器进行交互时,往往会用到HTTP的request,即服务器有一个对外接口REST API,因此当向服务器发送符合格式要求的HTTP request时,服务器会给出响应,甚至执行一些任务。如…

18734 拓扑排序

### 思路 1. **建模问题**:将课程和依赖关系建模为有向图,其中课程是节点,依赖关系是有向边。 2. **选择算法**:使用拓扑排序算法来确定课程的学习顺序。由于需要确保输出唯一性,同等条件下编号小的课程排在前面&…

fastAPI教程:路由操作及HTTP请求响应

FastAPI 三、路由操作 3.1 路由装饰器 路由装饰器,也叫路径操作装饰器。 FastAPI提供了一系列基于HTTP请求作为方法名的装饰器给开发者用于绑定url地址提供给外界操作API接口。 HTTP方法FastAPI代码描述GETapp.get()async 方法名(): pass获取数据POSTapp.post(…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.5-2.6

目录 第四门课 卷积神经网络(Convolutional Neural Networks)第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)2.5 网络中的网络以及 11 卷积(Network in Network and 11 convoluti…

【AI知识点】批归一化(Batch Normalization)

批归一化(Batch Normalization,BN) 是一种用于加速神经网络训练并提高模型稳定性的方法,最早由 Sergey Ioffe 和 Christian Szegedy 在 2015 年提出。批归一化通过在每一层对神经网络中的激活值进行标准化,使得每一层的…

D29【python 接口自动化学习】- python基础之输入输出与文件操作

day29 格式化输出 学习日期:20241006 学习目标:输入输出与文件操作﹣-41 格式化输出:如何将执行结果通过屏幕输出? 学习笔记: 三种常用的格式化输出方式 百分号方式 format函数方式 总结 1. 格式化输出…

在ubuntu好部署jenkins发布vue项目时遇到的一些问题及解决方法以及使用jenkins发布vue项目-npm自动打包发布的实现

一、在ubuntu好部署jenkins发布vue项目时遇到的一些问题及解决方法 1. 问题:webpack-dev-server不是内部或外部命令,也不是可运行的程序 解决:使用webpack要安装webpack-cli这个包,才可以调用webpack和webpack-dev-server这些命…

Hive3.x版本调优总结

文章目录 第 1 章 Explain 查看执行计划(重点)1.1 创建测试用表1)建大表、小表和 JOIN 后表的语句2)分别向大表和小表中导入数据 1.2 基本语法1.3 案例实操 第 2 章 Hive 建表优化2.1 分区表2.1.1 分区表基本操作2.1.2 二级分区2.…

虚拟机 VMware 安装 macOS

macOS 界面 MAC OS IOS下载: amacOS Monterey by Techrechard.comwmacOS Monterey by Techrechard.com 下载:Unlocker-v2.0.1-x64 Mac OS X 虚拟机中更改屏幕分辨率 终端输入命令: sudo defaults write /Library/Preferences/com.apple.w…

2-114 基于matlab的CA模型

基于matlab的CA模型,Singer模型对单机动目标进行跟踪算法,具有10页实验文档。采用蒙特卡罗方法对一个二坐标雷达对一平面上运动的目标进行观测,得到跟踪滤波结果。程序已调通,可直接运行。 下载源程序请点链接:2-114 …

Linux:进程的创建、终止和等待

一、进程创建 1.1 fork函数初识 #include pid_t fork(void); 返回值:子进程中返回0,父进程返回子进程id,出错返回-1 调用fork函数后,内核做了下面的工作: 1、创建了一个子进程的PCB结构体、并拷贝一份相同的进程地址…

Stable Diffusion绘画 | IP角色多视图生成技巧

在游戏设计、小说推文、角色设计里面,很多场景都运用到IP角色的多视图。 人物角色多视图 第1步,输入提示词: 第2步,由于要在同一张图片中生成多角度的并排展示,需要修改图片的分辨率(尤其是宽度&#xff…

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 目录 Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 1. 项目说明 2. 数据说明 (1)心跳信号分类预测数据集 3. 模型训练 (1)项目安装 &am…

MoveIt2-humble----在 RViz 中实现可视化

官方文档上的教程,从moveit1的melodic到moveit2的foxy基本一致,但是从最新的humble开始有了很大的变化,其中之一便是 lambda表达式 的广泛使用。 本节为教程的第二节,会介绍一个工具(moveit_visual_tools)…

运动员场景分割系统源码&数据集分享

运动员场景分割系统源码&数据集分享 [yolov8-seg-HGNetV2&yolov8-seg-aux等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al lnnovati…

麒麟 操作系统介绍| 银河麒麟和中标麒麟操作系统| Kylin 麒麟iso 镜像下载地址 银河麒麟操作系统v10 |

目录 #申请试用小技巧, 所有麒麟系列的版本如下 详细介绍如下: 银河麒麟高级服务器操作系统 V10 1. 龙芯-MIPS64el 版 2. 申威版 3. 兆芯版 4. 海光版 5. 飞腾版 6. 鲲鹏版 7. AMD64版 8. 龙芯-LoongArch64 版 9. ARM64版 银河麒麟桌面操作…

SpringMVC源码-AbstractUrlHandlerMapping处理器映射器将实现Controller接口的方式定义的路径存储进去

DispatcherServlet的initStrategies方法用来初始化SpringMVC的九大内置组件 initStrategies protected void initStrategies(ApplicationContext context) {// 初始化 MultipartResolver:主要用来处理文件上传.如果定义过当前类型的bean对象,那么直接获取&#xff0…