机器学习实战-系列教程6:SVM分类实战1(鸢尾花数据集/软间隔/线性SVM/非线性SVM/scikit-learn框架)项目实战、原理解读、代码解读

news2025/1/21 22:10:56

🌈🌈🌈机器学习 实战系列 总目录

本篇文章的代码运行界面均在Pycharm中进行
本篇文章配套的代码资源已经上传

SVM分类实战1
SVM分类实战2

支持向量机(Support Vector Machines,SVM),用于分类和回归任务的强大模型,通过找到最佳的超平面分离不同类别

  • 与传统算法进行对比,看看SVM究竟能带来什么样的效果
  • 软间隔的作用,这么复杂的算法肯定会导致过拟合现象,如何来进行解决呢?
  • 核函数的作用,如果只是做线性分类,好像轮不到SVM登场了,核函数才是它的强大之处!

1、初始操作

1.1 导包与设置

import numpy as np
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')
  1. plt.rcParams['axes.labelsize'] = 14: 这行代码设置了matplotlib图形中坐标轴标签的字体大小为14。
  2. plt.rcParams['xtick.labelsize'] = 12: 这行代码设置了matplotlib图形中x轴刻度标签的字体大小为12。
  3. plt.rcParams['ytick.labelsize'] = 12: 这行代码设置了matplotlib图形中y轴刻度标签的字体大小为12。
  4. warnings.filterwarnings('ignore'): 这行代码将警告消息的输出设置为忽略(不显示),这意味着在后续的代码执行中,如果有警告消息产生,它们将不会在屏幕上显示。

1.2 读入数据

from sklearn.svm import SVC
from sklearn import datasets
iris = datasets.load_iris()
X = iris['data'][:, (2, 3)]
y = iris['target']
setosa_or_versicolor = (y == 0) | (y == 1)
X = X[setosa_or_versicolor]
y = y[setosa_or_versicolor]
svm_clf = SVC(kernel='linear', C=1e10)
svm_clf.fit(X, y)
  1. 读入鸢尾花分类数据集
  2. 指定数据
  3. 指定标签
  4. setosa_or_versicolor = (y == 0) | (y == 1): 这行代码创建了一个布尔掩码数组setosa_or_versicolor,用于选择类别为0(山鸢尾)或1(变色鸢尾)的样本。
  5. X = X[setosa_or_versicolor]: 这行代码根据布尔掩码选择了对应的特征数据,只保留了山鸢尾和变色鸢尾的数据。
  6. y = y[setosa_or_versicolor]: 这行代码根据布尔掩码选择了对应的目标类别,只保留了山鸢尾和变色鸢尾的类别标签。
  7. svm_clf = SVC(kernel='linear', C=1e10): 这行代码创建了一个SVM分类器的实例svm_clf,使用线性核函数(kernel=‘linear’)和一个非常大的正则化参数C(C=1e10),这将导致模型尽量不允许分类错误。
  8. svm_clf.fit(X, y): 这行代码用选定的特征和目标数据训练了SVM分类器,以学习如何分辨山鸢尾和变色鸢尾。

在训练完成后,svm_clf模型将能够对新的鸢尾花样本进行分类,并决定它们属于山鸢尾(类别0)还是变色鸢尾(类别1)。这是一个简单的二元分类示例,演示了如何使用SVM来处理数据集中的两个类别。

2、简单SVM分类实例

2.1 线性回归模型

先看看一般的模型是怎么进行一个分类任务的,画出回归线隔开散点图对其分类,再用svm画出分割线最对比,看最终的效果怎么样。

x0 = np.linspace(0, 5.5, 200)
pred_1 = 5*x0 - 20
pred_2 = x0 - 1.8
pred_3 = 0.1 * x0 + 0.5
  1. 定义输入数据,200个0到5.5之间均匀分布作为输入数据
  2. 创建一般的模型的预测线,预测线1,w = 5,b=-20
  3. 预测线2
  4. 预测线3

2.2 简单SVM分类模型

def plot_svc_decision_boundary(svm_clf, xmin, xmax,sv=True):
    w = svm_clf.coef_[0]
    b = svm_clf.intercept_[0]
    print (w)
    x0 = np.linspace(xmin, xmax, 200)
    decision_boundary = - w[0]/w[1] * x0 - b/w[1]
    margin = 1/w[1]
    gutter_up = decision_boundary + margin
    gutter_down = decision_boundary - margin
    if sv:
        svs = svm_clf.support_vectors_
        plt.scatter(svs[:,0],svs[:,1],s=180,facecolors='#FFAAAA')
    plt.plot(x0,decision_boundary,'k-',linewidth=2)
    plt.plot(x0,gutter_up,'k--',linewidth=2)
    plt.plot(x0,gutter_down,'k--',linewidth=2)

前面我们已经定义了一个SVM分类器的实例svm_clf,使用线性核函数(kernel='linear'),表示回归方程就是一个 y = w 0 x 0 + w 1 x 1 + b y = w_0x_0+w_1x_1+b y=w0x0+w1x1+b的形式。

  1. 定义一个函数来绘制SVM分类器的决策边界和间隔,传入分类器、输入最大值、输入最小值、函数是否绘制支持向量
  2. 获取SVM分类器的权重
  3. 获取SVM分类器的截距
  4. 打印权重
  5. 一样的 x 0 x_0 x0
  6. 计算决策边界
  7. 计算间隔
  8. 计算上边界
  9. 计算下边界
  10. 当 sv 被设置为 True 时,函数会绘制支持向量(Support Vectors)
  11. 获取支持向量
  12. 绘制支持向量的散点图
  13. 绘制决策边界
  14. 绘制上边界
  15. 绘制下边界

2.3 画图对比

plt.figure(figsize=(14,4))
plt.subplot(121)
plt.plot(X[:,0][y==1],X[:,1][y==1],'bs')
plt.plot(X[:,0][y==0],X[:,1][y==0],'ys')
plt.plot(x0,pred_1,'g--',linewidth=2)
plt.plot(x0,pred_2,'m-',linewidth=2)
plt.plot(x0,pred_3,'r-',linewidth=2)
plt.axis([0,5.5,0,2])

plt.subplot(122)
plot_svc_decision_boundary(svm_clf, 0, 5.5)
plt.plot(X[:,0][y==1],X[:,1][y==1],'bs')
plt.plot(X[:,0][y==0],X[:,1][y==0],'ys')
plt.axis([0,5.5,0,2])
  1. 创建一个图形窗口
  2. 在图形窗口中创建两个子图
  3. 绘制数据点,其中类别为1的用蓝色方块表示,类别为0的用黄色方块表示
  4. 绘制一般的模型预测线
  5. 设置坐标轴范围
  6. 在图形窗口中创建第二个子图
  7. 绘制SVM分类器的决策边界和间隔
  8. 绘制数据点,其中类别为1的用蓝色方块表示,类别为0的用黄色方块表示
  9. 设置坐标轴范围
  10. 显示图形
    打印结果:

[1.29411744 0.82352928]
(0.0, 5.5, 0.0, 2.0)

无图片描述

SVM分类实战1
SVM分类实战2

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

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

相关文章

开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)

文章目录 前言 Target Language Compiler(TLC) C MEX S-Function模块 编写TLC文件 生成代码 Tips 分析和应用 总结 前言 见《开箱报告,Simulink Toolbox库模块使用指南(一)——powergui模块》 见《开箱报告&am…

Unity中Shader抓取屏幕并实现扭曲效果实现

文章目录 前言一、屏幕抓取,在上一篇文章已经写了二、实现抓取后的屏幕扭曲实现思路:1、屏幕扭曲要借助传入 UV 贴图进行扭曲2、传入贴图后在顶点着色器的输入参数处,传入一个 float2 uv : TEXCOORD,用于之后对扭曲贴图进行采样3、…

【鲁棒电力系统状态估计】基于投影统计的电力系统状态估计的鲁棒GM估计器(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Orangepi Zero2 全志H616(一):配置初始化和启动流程

目录 一,Orangepi简单说明 ①为什么使用全志H616 ②基本特性 ③配套操作系统支持 二,刷机和系统启动 ①准备工具 ②登录系统 ● 开发板供电 ● 登录 ● 开发板上板载LED灯测试说明 ③修改登录密码 ④网络配置 ⑤SSH登陆开发板 三&#xff…

(二十六)大数据实战——kafka集群之Kraft模式安装与部署

前言 本节内容主要介绍kafka3.0版本以后,一种新的kafka集群搭建模式看kraft,在该模式下,kafka高可用不在依赖于zookeeper,用 controller 节点代替 zookeeper,元数据保存在 controller 中,由 controller 直…

产品路线图管理,实践如何管理产品路线图和路线图规划

​什么是产品路线图? 产品路线图是一个高层次的战略计划,它描述了产品在未来一段时间可能会如何发展和壮大。 产品路线图确保整个产品团队持续关注产品的目标,帮助产品负责人把握产品的战略方向,调整产品的优先级和产品规划。 …

【实践篇】Redis最强Java客户端Redisson

文章目录 1. 前言2. Redisson基础概念2.1 数据结构和并发工具2.1.1 对Redis原生数据类型的封装和使用2.1.2 分布式锁实现和应用2.1.3 分布式集合使用方法 2.2 Redisson的高级特性2.2.1 分布式对象实现和使用2.2.2 分布式消息队列实现和使用2.2.3 分布式计数器实现和使用 3. 参考…

hadoop伪分布模式配置

1、修改/usr/local/hadoop/etc/hadoop/core-site.xml和/usr/local/hadoop/etc/hadoop/hdfs-site.xml文件 core-site.xml内容 <configuration><property><name>hadoop.tmp.dir</name><value>file:/usr/local/hadoop/tmp</value><descr…

日志平台搭建第四章:Linux安装kibana

相关链接 https://www.elastic.co/cn/downloads/kibana https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linux-x86_64.tar.gz 官网下载可能比较慢&#xff0c;下面提供下载地址 百度云链接&#xff1a;https://pan.baidu.com/s/1d9Cqr9EwHF94op90F57bww 提取码…

《微服务架构设计模式》第二章

文章目录 微服务架构是什么软件架构是什么软件架构的定义软件架构的41视图模型为什么架构如此重要 什么是架构风格分层式架构风格六边形架构风格微服务架构风格 为应用程序定义微服务架构识别操作系统根据业务能力进行拆分根据子域进行拆分拆分指导原则单一职责原则&#xff08…

idea的GsonFormatPlus插件教程

1 安装 插件 打开idea, File—>Setting—>Plugins,搜索 GsonFormatPlus 直接安装 2 json 转化为 实体类 2.1 新建一个类 2.2 点击右键 2.4 点击Format 生成注释

聊一下酱香拿铁,瑞幸与茅台强强联手

&#xff08;点击即可收听&#xff09; 这两天&#xff0c;酱香拿铁火爆朋友圈了的 为什么唯独酱香拿铁会火成这样&#xff0c;不知道有人思考过背后逻辑&#xff1f; 难道只是因为一个新出的拿铁咖啡吗&#xff1f; 奇葩咖啡那么多为什么都没有这个一出来就爆火。 联名本身就是…

BUUCTF内涵的软件 1

使用die查看文件信息&#xff0c;没有pe64就是pe32 运行看看 使用IDA打开文件 shift F12 打开字符串窗口 可能有人猜到了上面的 DBAPP{49d3c93df25caad81232130f3d2ebfad} 可能就是flag&#xff0c;但是我们保持做题的思路来得到这个flag 因为编码问题&#xff0c;这里显…

第29节-PhotoShop基础课程-滤镜库

文章目录 前言1.滤镜库2.Camera Raw滤镜 &#xff08;用来对图片进行预处理&#xff0c;最全面的一个&#xff09;3.神经滤镜&#xff08;2022插件 需要先下载&#xff09;4.液化&#xff08;胖-> 瘦 矮->高&#xff09;5.其它滤镜1.自适应广角2.镜头矫正 把图片放正3.消…

分享配置FreeRTOSConfig.h文件因部分宏值配置不对以及相应函数未定义出现的三个错误解决方法

今天来分享一个在创建FreeRTOS时候调用官方的FreeRTOSConfig头文件时&#xff0c;因部分宏值的配置与FreeRTOS内核文件中的函数不匹配&#xff0c;导致编译时候出现了相应的错误。 于是&#xff0c;既然遇到了&#xff0c;就准备拿出来讲一下&#xff0c;让其他遇到的小伙伴也…

VBA技术资料MF55:VBA_突出显示小于某值的单元格

【分享成果&#xff0c;随喜正能量】当你对别人有用时&#xff0c;人性就是善良的&#xff1b;当你对别人无用时&#xff0c;人性就是自私的&#xff1b;当你触碰别人利益时&#xff0c;人性就是恶毒的。活得通透的人必须做到&#xff1a;圈子越来越小&#xff0c;话也越来越少…

解决transform带来的z-index失效问题

现象如下&#xff1a; 其实下拉列表已经设置了z-index: 但是为什么z-index没有生效呢。 后来发现原来它的父级元素使用了transform进行垂直方向居中 网上查询了相关资料&#xff0c;说: tranform由于会构造一个新的context层, 然后这个层的z轴优先级会最低巴拉巴拉的&#xff…

通信原理板块——信道之无线信道和有线信道

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、信道 通信模型中的信道&#xf…

初探JVM

五道常问面试题 1.请你谈谈你对JVM的理解&#xff1f;java8虚拟机和之前的变化更新&#xff1f; 2.什么是OOM,什么是栈溢出StackOverFlowError?怎么分析? 3.JVM的常用调优参数有哪些&#xff1f; 4.内存快照如何抓取&#xff0c;怎么分析Dump文件&#xff1f;知道吗&#xf…

队列(Queue)的顶级理解

目录 1.队列(Queue) 的概念 2.单链表模拟实现队列 2.1创建队列 2.2入队列 2.3判断是否为空 2.4出队列 2.5获取队头元素 2.6完整代码&#xff1a; 2.7双向链表模拟实现队列代码 3.数组模拟实现队列代码 3.1创建队列 3.2判断是否为满 3.3检查是否为空 3.4插入元素 3…