机器学习支持向量机(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…...
数据安全法-政务数据安全与开放
第五章 政务数据安全与开放 第三十七条 国家大力推进电子政务建设,提高政务数据的科学性、准确性、时效性,提升运用数据服务经济社会发展的能力。 第三十八条 国家机关为履行法定职责的需要收集、使用数据,应当在其履行法定职责的范围内依…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
