SVM实战:从理论到鸢尾花数据集的分类可视化

SVM实战:从理论到鸢尾花数据集的分类可视化

在机器学习的广阔领域中,支持向量机(Support Vector Machine,SVM)作为一种经典且强大的分类算法,备受瞩目。它凭借独特的思想和卓越的性能,在模式识别、数据分类等诸多领域发挥着重要作用。本文将结合Python代码,通过对鸢尾花数据集的处理,带大家深入了解SVM的工作原理与实战应用。

一、SVM原理概述

SVM的核心目标是在特征空间中找到一个超平面,该超平面能够将不同类别的数据点尽可能清晰地分隔开来,并且使分隔的间隔达到最大。这个超平面可以用一个线性方程表示: w T x + b = 0 w^Tx + b = 0 wTx+b=0,其中 w w w是权重向量,决定了超平面的方向, b b b是偏置项,决定了超平面的位置。

在二维空间中,超平面就是一条直线;在三维空间中,超平面是一个平面;而在更高维度的空间中,超平面是一个具有高维几何特性的决策边界。那些距离超平面最近且恰好位于间隔边界上的数据点,被称为支持向量,它们对超平面的确定起着关键作用,决定了超平面的位置和方向。

SVM的优势在于,它不仅能够处理线性可分的数据,还能通过核函数将低维空间中线性不可分的数据映射到高维空间,使其在高维空间中变得线性可分,从而实现非线性数据的分类。常见的核函数有线性核函数、多项式核函数、径向基函数(RBF)等。

二、代码实现步骤解析

1. 数据读取与预处理

import pandas as pddata = pd.read_csv("iris.csv", header=None)

上述代码使用pandas库的read_csv函数读取鸢尾花数据集。由于数据集中没有表头,所以设置header=None。鸢尾花数据集包含150条记录,每条记录有4个特征和1个类别标签,4个特征分别为花萼长度、花萼宽度、花瓣长度和花瓣宽度,类别标签表示鸢尾花的品种(山鸢尾、杂色鸢尾、维吉尼亚鸢尾)。

2. 原始数据可视化

import matplotlib.pyplot as pltdata1 = data.iloc[:50, :]
data2 = data.iloc[50:, :]
# 原始数据是四维,无法展示,选择两个进行展示
plt.scatter(data1[1], data1[3], marker='+')
plt.scatter(data2[1], data2[3], marker='o')

为了直观地观察数据分布,选取数据集中的部分数据(前50条和后100条),并选择两个特征(花萼宽度和花瓣宽度)进行可视化。通过matplotlib库的scatter函数绘制散点图,可以初步看到不同类别数据点在二维平面上的分布情况。

3. SVM模型训练

from sklearn.svm import SVCX = data.iloc[:, [1, 3]]
y = data.iloc[:, -1]
svm = SVC(kernel='linear', C=float('inf'), random_state=0)
svm.fit(X, y)

从数据集中提取用于训练的特征矩阵X(选取花萼宽度和花瓣宽度两列)和标签向量y。使用sklearn库中的SVC类创建SVM模型,这里设置kernel='linear'表示使用线性核函数,意味着数据在当前二维特征空间中是线性可分的;C=float('inf')表示对分类错误的惩罚力度无穷大,要求模型必须将所有训练数据正确分类;random_state=0用于设置随机种子,保证结果的可重复性。最后调用fit方法对模型进行训练,使模型学习到数据的特征与类别之间的关系。

4. SVM结果可视化

# 参数w[原始数据为二维数组]
w = svm.coef_[0]
# 偏置项[原始数据为一维数组]
b = svm.intercept_[0]import numpy as npx1 = np.linspace(0, 7, 300)  # 在0~7之间产生300个数据
# 超平面方程
x2 = -(w[0] * x1 + b) / w[1]
# 上超平面方程
x3 = (1 - (w[0] * x1 + b)) / w[1]
# 下超平面方程
x4 = (-1 - (w[0] * x1 + b)) / w[1]
# 可视化原始数据,选取1维核3维的数据进行可视化
# plt.scatter(data1[1],data1[3],marker='+',color='b')
# plt.scatter(data2[1],data2[3],marker='o',color='b')
# 可视化超平面
plt.plot(x1, x2, linewidth=2, color='r')
plt.plot(x1, x3, linewidth=1, color='r', linestyle='--')
plt.plot(x1, x4, linewidth=1, color='r', linestyle='--')
# 进行坐标轴限制
plt.xlim(4, 7)
plt.ylim(0, 5)
# 找到支持向量[二维数组]可视化支持向量
vets = svm.support_vectors_
plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')plt.show()

训练完成后,提取模型的权重向量w和偏置项b,根据超平面方程计算出一系列点的坐标,用于绘制超平面、上超平面和下超平面。通过matplotlibplot函数将这些平面绘制出来,并设置合适的颜色、线宽和线型。同时,提取支持向量,使用scatter函数将其可视化,直观地展示支持向量在分类中的关键作用。最后通过xlimylim函数设置坐标轴的范围,使可视化效果更加美观和清晰。

三、结果分析

从可视化结果可以清晰地看到,SVM模型成功地找到了一个线性超平面,将不同类别的鸢尾花数据点分隔开来。支持向量位于间隔边界上,它们确定了超平面的位置和方向。在这个例子中,由于设置了较大的惩罚参数C,模型对训练数据实现了完美分类,所有数据点都被正确划分到相应的类别区域。

然而,在实际应用中,过高的C值可能导致模型过拟合,即模型在训练数据上表现良好,但在新数据上的泛化能力较差。因此,需要根据具体问题和数据特点,合理调整C值以及选择合适的核函数,以达到更好的分类效果。

四、总结

通过对鸢尾花数据集的SVM分类实战,我们深入了解了SVM的原理、代码实现过程以及结果分析方法。SVM作为一种强大的机器学习算法,在数据分类任务中展现出了优秀的性能和独特的优势。希望本文的内容能够帮助大家更好地理解和应用SVM,在实际的机器学习项目中发挥其价值。在后续的学习和实践中,我们还可以进一步探索不同核函数、参数调整以及SVM在更多复杂数据集上的应用,不断拓展对这一算法的认识和掌握程度。

以上博客从多方面解读了SVM的实战应用。你若觉得某些部分需要补充、修改,或有其他想法,欢迎随时和我说。

这篇博客全面剖析了SVM的实战应用。若你对博客的内容深度、篇幅长度等有新想法,随时和我交流。

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

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

相关文章

陶瓷陶器缺陷检测VOC+YOLO格式938张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):938 标注数量(xml文件个数):938 标注数量(txt文件个数):938 标注…

通过Docker部署Prometheus + Grafana搭建监控平台【超详细版】

文章目录 前言一、Prometheus、Grafana1.1 Prometheus简介1.2 Grafana简介1.3 Prometheus的核心组件1.4 Prometheus优点1.5 Prometheus缺点 二、部署Docker三、主节点部署PrometheusGrafana3.1 部署Prometheus3.2 防火墙开放端口3.3 访问服务3.4 安装Grafana3.5 防火墙开放端口…

华为云Flexus+DeepSeek征文|DeepSeek-V3商用服务开通教程

目录 DeepSeek-V3/R1商用服务开通使用感受 DeepSeek-V3/R1商用服务开通 1、首先需要访问ModelArts Studio_MaaS_大模型即服务_华为云 2、在网站右上角登陆自己的华为云账号,如果没有华为云账号的话,则需要自己先注册一个。 3、接着点击ModelArts Stu…

ubuntu20.04修改默认网卡名称为eth*

在Ubuntu 20.04.6中,遵循可预测网络接口设备命名规则,网卡名称默认可能是以"enp*"、"ens*"等开头的格式,但是实际使用过程中,某些应用只能读取eth*的网卡,需要修改。 查看网卡名称 ip link show …

linux下抓包工具--tcpdump介绍

文章目录 1. 前言2. 命令介绍3. 常见选项3.1. 接口与基本控制3.2 输出控制3.3 文件操作3.4 高级调试 4. 过滤表达式4.1 协议类型4.2 方向与地址4.3 逻辑运算符 5. 典型使用场景5.1 网络故障排查5.2 安全分析与入侵检测5.3 性能分析与优化 linux下抓包工具--tcpdump介绍 1. 前言…

AI大模型-RAG到底能做些什么?

RAG常见的应用场景,有以下几个方面: 1.智能客服系统:比如电商领域,对客户提出的常见问题,进行自动回复。减少人力成本。 2.人力资源管理:一个新的员工,入职一家大型公司,公司中有各…

C++ unordered_set unordered_map

上篇文章我们讲解了哈希表的实现,这节尝试使用哈希表来封装unordered_set/map 1. unordered_set/map的框架 封装的过程实际上与set/map类似,在unordered_set/map层传递一个仿函数,用于取出key值 由于我们平常使用的都是unordered_set/map&…

REST API、FastAPI与Flask API的对比分析

以下是关于REST API、FastAPI与Flask API的对比分析,涵盖架构设计、性能表现、开发效率等核心维度: 一、核心定位与架构差异 REST API 本质:一种基于HTTP协议的架构风格,强调资源化操作(通过URI定位资源)、…

实战交易策略 篇二十二:情绪流龙头交易策略

文章目录 系列文章理论基础股市的本质资金与情绪题材龙头股龙头战法实战技法情绪流技术分析择时实操情绪流龙头战法要诀六大步骤九大术法买卖点量化标准系列文章 实战交易策略 篇一:奥利弗瓦莱士短线交易策略 实战交易策略 篇二:杰西利弗莫尔股票大作手操盘术策略 实战交易策…

用VNA进行天线阻抗匹配的实例大图

比如我这天线,在7Mhz时不谐振,我进行匹配 天线的阻抗很高,大约是在500-1400欧,而等效电容电感很小。 所以我考虑使用阻抗变压器降低阻抗。 1。测试天线阻抗,电阻相当高,等效电容很小。 2。通过磁环匹配到…

一个读写excel的简单程序(golang)

最近总有一些临时统计的需求,比如其他团队生产的一批数据,需要确认这批数据是否入到数仓,提供的列表就是一个excel,我们就需要读取excel中的所有数据,之后查询数仓数据库确认这批数据是否存在,并分别将存在…

【AI面试准备】AI误判案例知识库优化方案

面试题:建立内部知识库:收集AI误判案例训练领域专属模型。 在回答关于“建立内部知识库收集AI误判案例训练领域专属模型”的面试问题时,建议从以下结构化框架展开,既能体现专业性,又能展现解决问题的系统性和实际落地…

Ocelot\Consul\.NetCore的微服务应用案例

案例资料链接:https://download.csdn.net/download/ly1h1/90733765 1.效果 实现两个微服务ServerAPI1和ServerAPI2的负载均衡以及高可用。具体原理,看以下示意图。 2.部署条件 1、腾讯云的轻量化服务器 2、WindowServer2016 3、.NETCore7.0 4、Negut …

中小企业MES系统需求文档

适用对象:中小型离散制造企业(年产值1-5亿,员工200-800人) 版本:V1.0 日期:2025年5月2日 一、业务背景与目标 1.1 现状痛点 生产黑箱化:车间进度依赖人工汇报,异常响应延迟>2小…

OpenAI最新发布的GPT-4.1系列模型,性能体验如何?

简单来说,这次GPT-4.1的核心思路就是:更实用、更懂开发者、更便宜!OpenAI这次没搞太多花里胡哨的概念,而是实实在在地提升了大家最关心的几个点:写代码、听指令、处理超长文本,而且知识库也更新到了2024年6月。 写代码。要说这次GPT-4.1最亮眼的地方,可能就是写代码这块…

【基础算法】二分查找的多种写法

前言 在算法竞赛中,二分查找使用的频率是非常高的,对于C选手而言,有STL中自带的lower_bound和upper_bound二分查找,可以很方便的进行二分查找。但是非C选手、或者需要自定义多条件查找的情况需要自己写一个二分,本文对…

兰亭妙微:火箭发射界面案例分享

北京蓝蓝设计团队来自清华美院,工作多年,行业经验丰富,专业性很强。我们是热爱设计,设计不仅是我们的专业,我们的职业,还是我们的爱好。每一个蓝蓝设计的设计师都希望自己的设计越来越好,以高标…

完美解决.NET Framework 4.0 中 System.Drawing 库不支持 WebP 格式的图像处理

如果你想在 .NET Framework 4.0 中使用 ImageMagick 处理图片,可以通过 Magick.NET 库来实现。Magick.NET 是 ImageMagick 的 .NET 封装,可以用来读取、写入、编辑图像。 以下是如何使用 Magick.NET 来处理图像并提取图像的宽度和高度。 步骤&#xff…

string--OJ1

链接: 例一 链接: 例er class Solution { public:int myAtoi(string str) {int sign 1;int ret0;int i0;while(str[i] ){i;}if(str[i]||str[i]-){if(str[i]-)sign*-1;i;}while(str[i]>0&&str[i]<9){int rstr[i] - 0;if(ret>INT_MAX/10||(retINT_MAX/10&…

Go 写一个简单的Get和Post请求服务

Go 写一个简单的Get和Post请求服务 ✅ 一、准备工作 安装 Go 官网下载地址 安装后执行&#xff1a; go version安装 VS Code 插件 在 VS Code 插件市场搜索并安装插件&#xff1a;Go&#xff08;由 Go 团队提供&#xff09; 配置环境变量&#xff08;可选&#xff09; 设置 …