机器学习支持向量机(SVM)算法
一、引言
在当今数据驱动的时代,机器学习算法在各个领域发挥着至关重要的作用。支持向量机(Support Vector Machine,SVM)作为一种强大的监督学习算法,以其在分类和回归任务中的卓越性能而备受瞩目。SVM 具有良好的泛化能力,能够在小样本数据上取得出色的效果,并且对于高维数据和非线性问题也有有效的解决方案。本文将深入探讨支持向量机算法的原理,并结合实际案例展示其在不同领域的应用。
二、支持向量机的基本原理
线性可分问题
- 对于一个二分类问题,如果存在一个超平面能够将不同类别的样本完全分开,那么这个问题就是线性可分的。例如,在二维空间中,一条直线可以将两类点分开;在三维空间中,一个平面可以将两类点分开。
- 设样本集为 ,其中 是样本的特征向量, 是样本的类别标签。如果存在一个超平面 ,使得对于所有的正例样本 ,有 ;对于所有的负例样本 ,有 ,那么这个超平面就可以将两类样本完全分开。
最大间隔超平面
- SVM 的目标是找到一个最优的超平面,使得两类样本之间的间隔最大。间隔是指超平面与最近的样本点之间的距离,而最大间隔超平面就是具有最大间隔的超平面。
- 对于一个给定的超平面 ,样本点 到超平面的距离可以通过公式 计算。其中, 表示向量 的范数。
- 对于线性可分的二分类问题,正例样本和负例样本到超平面的距离之和为 ,这个值被称为间隔。SVM 的目标就是找到一个超平面,使得间隔最大。
- 可以通过求解以下优化问题来找到最大间隔超平面:
对偶问题
- 引入拉格朗日乘子 ,构建拉格朗日函数:
- 根据拉格朗日对偶性,原问题的对偶问题为:
核函数
- 对于非线性问题,无法直接找到一个线性超平面将样本分开。此时,可以通过引入核函数将低维空间中的样本映射到高维空间,使得在高维空间中样本变得线性可分。
- 设原始空间中的样本点 和 ,核函数 满足 ,其中 是将样本点 映射到高维空间的函数。
- 在高维空间中,SVM 的优化问题可以表示为:
三、支持向量机的实战应用
数据准备
- 首先,我们需要准备用于训练和测试的数据集。可以从公开的数据集中获取,也可以自己收集和整理数据。
- 对于分类问题,数据集通常包含多个特征和一个类别标签。例如,在鸢尾花数据集(Iris dataset)中,每个样本有四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),类别标签有三种(山鸢尾、变色鸢尾、维吉尼亚鸢尾)。
- 在进行训练之前,需要对数据进行预处理,如数据清洗、特征选择、特征缩放等。
- 数据清洗:去除数据中的噪声和异常值,确保数据的质量。
- 特征选择:选择对分类任务有重要影响的特征,减少特征维度,提高算法的效率和性能。
- 特征缩放:将特征值缩放到相同的范围,避免某些特征对算法的影响过大。常用的特征缩放方法有标准化(Standardization)和归一化(Normalization)。
模型训练
- 使用 Python 中的 scikit-learn 库可以方便地实现支持向量机算法。
- 首先,导入所需的库和模块:
from sklearn import svmfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoreimport numpy as np
- 然后,加载数据集并进行预处理:
# 加载数据集data = np.loadtxt('data.csv', delimiter=',')X = data[:, :-1]y = data[:, -1]# 特征缩放from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X = scaler.fit_transform(X)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
- 接下来,创建支持向量机模型并进行训练:
# 创建支持向量机模型clf = svm.SVC(kernel='linear', C=1.0)# 训练模型clf.fit(X_train, y_train)
- 在创建模型时,可以选择不同的核函数和参数。例如,这里选择线性核函数,并设置参数 。参数 是惩罚参数,控制着模型的复杂度和对误分类样本的惩罚程度。较大的 值会使模型更加复杂,对误分类样本的惩罚更重,但可能会导致过拟合;较小的 值会使模型更加简单,对误分类样本的惩罚较轻,但可能会导致欠拟合。
模型评估
- 训练完成后,我们可以使用测试集对模型进行评估。
- 预测测试集的结果:
y_pred = clf.predict(X_test)
- 计算模型的准确率:
accuracy = accuracy_score(y_test, y_pred)print('Accuracy:', accuracy)
- 除了准确率,还可以使用其他指标如精确率、召回率、F1 值等对模型进行评估。
- 精确率(Precision):表示预测为正例的样本中真正的正例所占的比例。
- 召回率(Recall):表示真正的正例被预测为正例的比例。
- F1 值:是精确率和召回率的调和平均数,综合考虑了精确率和召回率的平衡。
- 可以使用 scikit-learn 库中的 classification_report 函数来输出精确率、召回率和 F1 值等指标:
from sklearn.metrics import classification_reportprint(classification_report(y_test, y_pred))
参数调优
- SVM 的性能受到核函数和参数的影响,因此需要进行参数调优以获得最佳的性能。
- 可以使用网格搜索、随机搜索等方法进行参数调优。
- 网格搜索(Grid Search):在给定的参数范围内,对所有可能的参数组合进行穷举搜索,找到最佳的参数组合。
- 随机搜索(Random Search):在给定的参数范围内,随机选择一些参数组合进行搜索,找到最佳的参数组合。
- 例如,使用网格搜索进行参数调优:
from sklearn.model_selection import GridSearchCV# 定义参数范围param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf', 'poly'], 'degree': [2, 3], 'gamma': [0.1, 1, 10]}# 创建支持向量机模型clf = svm.SVC()# 进行网格搜索grid_search = GridSearchCV(clf, param_grid, cv=5)grid_search.fit(X_train, y_train)# 输出最佳参数print('Best parameters:', grid_search.best_params_)print('Best score:', grid_search.best_score_)
- 这里定义了参数范围,包括惩罚参数 、核函数类型、多项式核函数的次数和高斯核函数的参数 。然后使用网格搜索在参数范围内寻找最佳的参数组合。网格搜索使用交叉验证(Cross Validation)来评估不同参数组合的性能,这里设置交叉验证的次数为 5。
应用案例
- 支持向量机可以应用于各种领域,如图像识别、文本分类、生物信息学等。
- 例如,在图像识别中,可以使用 SVM 对图像进行分类,识别不同的物体或场景。可以将图像的像素值作为特征向量,使用 SVM 进行分类。
- 在文本分类中,可以将文本表示为向量,然后使用 SVM 对文本进行分类,如新闻分类、情感分析等。可以使用词袋模型(Bag of Words)或 TF-IDF 等方法将文本表示为向量。
- 在生物信息学中,可以使用 SVM 对蛋白质结构进行预测、对基因表达数据进行分类等。可以将蛋白质的氨基酸序列或基因表达数据作为特征向量,使用 SVM 进行分类或回归。
四、总结
支持向量机是一种强大的机器学习算法,具有出色的分类和回归能力。本文深入探讨了支持向量机算法的原理,包括线性可分问题、最大间隔超平面、对偶问题和核函数。通过一个实战案例展示了支持向量机在数据准备、模型训练、模型评估和参数调优方面的应用。最后,介绍了支持向量机的应用领域,并给出了一些应用案例。希望本文能够帮助读者更好地理解和应用支持向量机算法。
相关文章:
机器学习支持向量机(SVM)算法
一、引言 在当今数据驱动的时代,机器学习算法在各个领域发挥着至关重要的作用。支持向量机(Support Vector Machine,SVM)作为一种强大的监督学习算法,以其在分类和回归任务中的卓越性能而备受瞩目。SVM 具有良好的泛化…...
解决 MySQL 启动失败与大小写问题,重置数据库
技术文档:解决 MySQL 启动失败与大小写问题,重置数据库 1. 问题背景 在使用 MySQL 时,可能遇到以下问题: MySQL 启动失败,日志显示 “permission denied” 或 “Can’t create directory” 错误。MySQL 在修改配置文…...
计算生成报价单小程序系统开发方案
计算生成报价单小程序报价系统,是根据商品品牌、类型、型号、规格、芯数、特性、颜色、分类进行选择不同的参数进行生成报价单,要求报价单支持生成图片、pdf、excel表格。 计算生成报价单小程序系统的主要功能模块有: 1、在线生成报价单&…...
若依集成Uflo2工作流引擎
文章目录 1. 创建子模块并添加依赖1.1 新建子模块 ruoyi-uflo1.2 引入 Uflo2 相关依赖 2. 配置相关 config2.1 配置 ServletConfig2.2 配置 UfloConfig2.3 配置 TestEnvironmentProvider 3. 引入Uflo配置文件4. 启动并访问 Uflo2 是由 BSTEK 自主研发的一款基于 Java 的轻量级工…...
STM32模拟I2C通讯的驱动程序
目录 STM32模拟I2C通讯的驱动程序 开发环境 引脚连接 驱动程序 STM32模拟I2C通讯的驱动程序 开发环境 立创天空星开发板、主控芯片为STM32F407VxT6 引脚连接 使用stm32的PB9引脚模拟I2C时钟线SCL、PB8引脚模拟I2C数据线SDA 驱动程序 i2c.h文件如下:#ifndef…...
Unity简单操作及使用教程
Unity 是一款强大的跨平台游戏引擎,它不仅支持 2D 和 3D 游戏的开发,还可以用于虚拟现实 (VR)、增强现实 (AR)、动画、建筑可视化等多个领域。Unity 提供了完整的开发环境,具有丰富的功能、工具和资源,可以帮助开发者快速实现创意…...
网络安全法-监测预警与应急处置
第五章 监测预警与应急处置 第五十一条 国家建立网络安全监测预警和信息通报制度。国家网信部门应当统筹协调有关部门加强网络安全信息收集、分析和通报工作,按照规定统一发布网络安全监测预警信息。 第五十二条 负责关键信息基础设施安全保护工作的部门…...
qt 设置系统缩放为150%,导致的文字和界面的问题
1 当我们设置好布局后,在100%的设置里面都是正常的,但是当我们修改缩放为150%后,字体图标,界面大小就出现问题了,这就需要我们设置一些参数。 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QCoreAppl…...
Scala的正则表达式二
验证用户名是否合法 规则 1.长度在6-12之间 2.不能数字开头 3.只能包含数字,大小写字母,下划线def main(args: Array[String]): Unit {val name1 "1admin"//不合法,是数字开头val name2 "admin123"//合法val name3 &quo…...
软考系分:今日成绩已出
前言 今年报考了11月份的软考高级:系统分析师。 考试时间:11月9日。 总体感觉偏简单,但是知识点记得不牢,估计机会不大。 今日 12.11 ,成绩已出,每科总分 75分,全部45分以上为通过。 成绩总…...
DevExpress WPF中文教程:Grid - 如何移动和调整列大小?(一)
DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…...
Docker 安装 sentinel
Docker 安装系列 1、拉取 [rootTseng ~]# docker pull bladex/sentinel-dashboard Using default tag: latest latest: Pulling from bladex/sentinel-dashboard 4abcf2066143: Pull complete 1ec1e81da383: Pull complete 56bccb36a894: Pull complete 7cc80011dc6f: Pull…...
PyCharm 2024.1 解锁版 (Python集成开发IDE)详细安装步骤
分享文件:PyCharm 2024.1 解锁版 (Python集成开发IDE) 链接:https://pan.xunlei.com/s/VOAa_CiVVvZnyQgLfpmCIOABA1 提取码:cx4h 安装步骤 1、下载解压后点击如下进行安装 2、选择安装路径 3、默认勾选将PyCharm创建桌面快捷方式 4、默认…...
SQL中的函数介绍
大多数SQL实现支持以下类型 文本函数:用于处理文本字符串(如删除或填充值,转换值为大写或小写)。数值函数:用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)。日期和时间函…...
【工业机器视觉】基于深度学习的水表盘读数识别(2-数据采集与增强)
【工业机器视觉】基于深度学习的仪表盘识读(1)-CSDN博客 数据采集与增强 为了训练出适应多种表型和环境条件的模型,确保数据集的质量与多样性对于模型的成功至关重要。高质量的数据不仅需要准确无误、具有代表性,还需要涵盖尽可能…...
爬虫基础知识点
最近看了看爬虫相关知识点,做了记录,具体代码放到了仓库,本文仅学习使用,如有违规请联系博主删除。 这个流程图是我使用在线AI工具infography生成的,这个网站可以根据url或者文本等数据自动生成流程图,挺…...
高效利用资源:分布式有状态服务的高可靠性设计
在分布式系统设计中,实现有状态服务的高可靠性通常采用主备切换的方式。当主服务停止工作时,备服务接管任务,例如通过Keepalive实现VIP的切换以保证可用性。然而,这种方式存在资源浪费的问题,因为备服务始终处于空转状…...
aws(学习笔记第十六课) 使用负载均衡器(ELB)解耦webserver以及输出ELB的日志到S3
aws(学习笔记第十六课) 使用负载均衡器(ELB)以及输出ELB的日志到S3 学习内容: 使用负载均衡器(ELB)解耦web server输出ELB的日志到S3 1. 使用负载均衡器(ELB) 全体架构 使用ELB(Elastic Load Balancer)能够解耦外部internet访问和web server之间的耦合,…...
关于php://filter过滤器
常规的php://filter过滤器: <?php //index.php include($_REQUEST[file]); ?> <?php //flag.php $flagflag{test_flag}; ?> 同过base64读取flag.php的类容: 常用payload: (这是最常用的payload) ph…...
数据安全法-政务数据安全与开放
第五章 政务数据安全与开放 第三十七条 国家大力推进电子政务建设,提高政务数据的科学性、准确性、时效性,提升运用数据服务经济社会发展的能力。 第三十八条 国家机关为履行法定职责的需要收集、使用数据,应当在其履行法定职责的范围内依…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
