机器学习:SVM的代码实现

目录

前言

一、完整代码

二、输出结果

三、实现步骤解析

1.读取数据

2.创建模型并训练

3.可视化SVM结果

总结


前言

        支持向量机(SVM,Support Vector Machine)是一种用于分类和回归的监督学习算法。它的核心思想是通过在特征空间中找到一个最佳的分隔超平面来将数据分成不同的类别。

 

一、完整代码

import pandas as pd# 读取数据
data = pd.read_csv('iris.csv', header=None)"""
使用SVM进行训练
"""
from sklearn.svm import SVC  # SVC做分类  SVR做回归# 获取特征和标签
x = data.iloc[:, [1, 3]]
y = data.iloc[:, -1]
svm = SVC(kernel='linear', C=10, random_state=0)   # C=float('inf')将软间隔的惩罚设置为无穷大
svm.fit(x, y)"""
可视化SVM结果
"""
# 参数w[原始数据为二维数组]
w = svm.coef_[0]
# 偏置项b[原始数据为一维数组]
b = svm.intercept_[0]
# 超平面方程:w1x1+w2x2+b=0
# ->>x2 = -(w1x1+b)/w2
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]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')
# plt.show()# 可视化超平面
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, 6)# 可视化支持向量
vets = svm.support_vectors_
plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')
plt.show()

 

二、输出结果

 

三、实现步骤解析

1.读取数据

  • 这里使用的是鸢尾花的数据
import pandas as pd# 读取数据
data = pd.read_csv('iris.csv', header=None)

 

2.创建模型并训练

  • svm模型里的C参数可以用来控制惩罚力度进而控制软间隔的程度
    • C越大,惩罚越严格,软间隔程度越小,越准确,但也越容易过拟合
    • C越小,惩罚越不严格,软间隔程度越大,越不准确,但也越不容易过拟合
"""
使用SVM进行训练
"""
from sklearn.svm import SVC  # SVC做分类  SVR做回归# 获取特征和标签
x = data.iloc[:, [1, 3]]
y = data.iloc[:, -1]
svm = SVC(kernel='linear', C=10, random_state=0)   # C=float('inf')将软间隔的惩罚设置为无穷大
svm.fit(x, y)

 

3.可视化SVM结果

  • 获取svm模型里返回的系数和截距
  • 再通过系数和截距求出各直线方程
  • 最后进行二维的展示
"""
可视化SVM结果
"""
# 参数w[原始数据为二维数组]
w = svm.coef_[0]
# 偏置项b[原始数据为一维数组]
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]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')
# plt.show()# 可视化超平面
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, 6)# 可视化支持向量
vets = svm.support_vectors_
plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')
plt.show()

 

总结

        总的来说,SVM可以使用核函数处理非线性问题,通过将数据映射到更高维的空间。正则化参数C控制分类准确性与模型复杂度之间的平衡。SVM广泛应用于文本分类、图像识别、生物信息学和金融预测等领域。

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

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

相关文章

记录|Visual Studio中的Git上传下载使用

目录 前言一、前提准备Step1 仓库准备Step2. 本地仓库和远程仓库绑定当前效果展示 二、下载更新内容到本地仓库情形Step1. 下载 三、更新内容,上传文件到远程仓库情形Step1. 下载Step2. 上传当前效果展示 更新时间 前言 这部分是使用过程中的经验 一、前提准备 St…

SpringBoot集成kafka-监听器手动确认接收消息(主要为了保证业务完成后再确认接收)

SpringBoot集成kafka-监听器手动确认接收消息 1、说明2、示例2.1、application.yml2.2、消费者2.3、生产者2.4、测试类2.5、测试 1、说明 kafak中默认情况下是自动确认消息接收的,也就是说先启动消费者监听程序,再启动生产者发送消息,此时消…

【Java并发】变量的内存存储、线程安全分析

要理解原因,首先要清楚局部变量是什么?局部变量的存储方式是什么? 局部变量,从名字上就可以知道,它是只在特定作用域内可见并且只能在该作用域内使用的变量。也就意味着不同作用域的局部变量是不共享的。在多线程环境下…

HTML静态网页成品作业(HTML+CSS+JS)——迪士尼公主介绍(6个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码,共有6个页面。 二、作品演示 三、代码…

ICML 2024 顶级论文:机器学习有什么新进展?

在本周的文章中,我打算探讨在国际机器学习大会 ICML 上发表的论文,该大会目前于 2024 年 7 月 21 日至 27 日在奥地利首都维也纳举行。与其他顶级人工智能会议一样,每年都会有数千篇论文提交,但录取率相对较低(过去三年…

机械学习—零基础学习日志(如何理解概率论5)

二维随机变量 这里的其实就是边缘分布 联合分布 当结合来看,小明和小红的成绩。可以发现,小明和小红是独立事件,可以放到一个模块内部分析。 而当所有的情况考虑,单独小红取得某个成绩的概率,都可以计算出来。 例如…

攻防世界 1000次点击

做题笔记。 下载解压 查壳。 32位ida打开。 查找字符串。 winmain函数写的,程序运行如下: 一开始思路是想着分析找到关键代码然后去od进行调试。 后来,额,不想看代码了。吐了。 尝试去字符串搜索flag样式,确实一发现…

【C/C++】Sleep()函数详解

🦄个人主页:修修修也 🎏所属专栏:Linux ⚙️操作环境:Visual Studio 2022 / Xshell (操作系统:CentOS 7.9 64位) 目录 📌Windows系统下Sleep()函数简介 🎏函数功能 🎏函数参数 🕹️DWORD milliseconds &…

Linux云计算 |【第二阶段】SHELL-DAY2

主要内容: 条件测试(字符串比较、整数比较、文件状态)、IF选择结构(单分支、双分支、多分支)、For循环结构、While循环结构 一、表达式比较评估 test 命令是 Unix 和 Linux 系统中用于评估条件表达式的命令。它通常用…

致远OA OCR票据识别组件

OCR票据识别 技术支持 技术大佬支持本文档 使用范围 任何票种信息,只要需要对接到oa底表中,就能够实现各种票种,各种字段的对接,包括票据识别,发票核验,适配各种票据 使用介绍 1 配置每种发票的ocr设…

yup 使用 2 - 获取默认值,循环依赖,超大数字验证,本地化

yup 使用 2 - 获取默认值,循环依赖,超大数字验证,本地化 上一篇的使用在这里:yup 基础使用以及 jest 测试,这篇讲的是比较基础的东西, 获取默认值 之前用的都是 cast({}),然后如果有些值是必…

叉车(工业车辆)安全管理系统,云端监管人车信息运营情况方案

近年来,国家和各地政府相继出台了多项政策法规,从政策层面推行叉车智慧监管,加大叉车安全监管力度。同时鼓励各地结合实际,积极探索智慧叉车建设,实现作业人员资格认证、车辆状态认证、安全操作提醒、行驶轨迹监控等&a…

如何利用电商 API 数据分析助力精准选品!

电商 API 数据分析在选品过程中起着至关重要的作用,它们之间有着密切的关系: 一、提供市场趋势洞察 热门商品识别: 通过分析电商 API 中的销售数据,包括商品的销售量、销售额、销售频率等指标,可以快速准确地识别出当…

1Panel应用推荐:MeterSphere开源持续测试工具

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

redis面试(二十一)读写锁互斥

读锁非互斥 非互斥的意思就是,一个客户端或者线程加锁之后,另一个客户端线程也可以来进行加锁。 还是拿着ReadLock的lua脚本来看看 刚才我们已经分析过第一个线程来加读锁的逻辑了 所以上半截不用重复说了, hset anyLock mode read hset an…

后端微服务架构:构建分布式博客系统

后端微服务架构:构建分布式博客系统 在当今的软件开发领域,微服务架构已经成为构建可扩展、灵活且易于维护的应用程序的主流选择。本文将探讨如何利用微服务架构来设计和实现一个分布式的博客系统。 1. 微服务架构简介 微服务架构是一种将应用程序分解…

【微服务部署】Linux部署微服务启动报ORA-01005

问题背景: Linux机器部署springboot微服务,部署完成后发现无法启动,后台报ORA-01005错误。 解决方案: 1.检查当前服务器是否已安装oracle客户端 命令行执行sqlplus username/passwd实例名,如果执行成功,说…

微信小程序源码 图书管理系统 万字文档 Springboot vue

源码地址 系统演示 SpringBoot vue 微信小程序源码 图书管理系统 附带运行教程 系统演示 万字文档,全套开发工具 开发工具:IDEA,微信小程序工具 数据库:mysql8 使用环境:Windows JDK版本:1.8 后端构建工具:maven 项目使用到的技术栈 Springboot2 mybatis vue Mys…

计算机毕业设计选题推荐-摇滚音乐鉴赏网站-Java/Python项目实战

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

领域驱动设计DDD详解与战术建模落地

一、什么是DDD? 1.1、DDD的概念 Domain-Driven Design(领域驱动设计)它由Eric Evans在他的2003年出版的书籍《Domain-Driven Design: Tackling Complexity in the Heart of Software》中首次提出。DDD 核心思想是通过领域驱动设计方法定义领…