02-04 周六 图解机器学习 SVM 支持向量机分类学习

news/2024/9/17 9:40:03/
02-04 周六 图解机器学习 SVM 支持向量机分类学习
时间版本修改人描述
2023年2月4日11:15:16V0.1宋全恒新建文档

环境搭建

 首先搭建jupyter环境,方便可视化

(base) root@node33-a100:~# docker run --name sqh-learn -d -p 10088:8888 -it 10.101.12.128/framework/jupyter:pytorch-1.10.0-cuda11.3-cudnn8-devel-jupyter-sshd-2.0 
9296ffc57f683198dc50d62c52c72e874edf7381de6c8d5390c31c68015424f1
(base) root@node33-a100:~# docker exec -it 9296 bash

注:8888端口为jupyter端口。做端口映射方便访问

问题之No module named ‘matplotlib’

No module named ‘matplotlib’

root@9296ffc57f68:/workspace# pip install matplotlib

问题之No module named ‘seaborn’

关于jupyter环境切换问题

root@9296ffc57f68:/workspace# pip install seaborn

问题之No module named ‘sklearn’

# pip install scikit-learnInstalling collected packages: threadpoolctl, scipy, joblib, scikit-learn
Successfully installed joblib-1.2.0 scikit-learn-1.0.2 scipy-1.7.3 threadpoolctl-3.1.0

问题之No module named ‘sklearn.datasets.samples_generator’

 修改代码

from sklearn.datasets import make_blobs

代码解读

代码片段一make_blobs

#%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn; 
from sklearn.linear_model import LinearRegression
from scipy import stats
import pylab as pl
seaborn.set()
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=50, centers=2,random_state=0, cluster_std=0.60)

 上述代码,主要是实现了样本的制作,含义是生成50个样本点,中心一共有两个,上述打印X,y输出如下:

image-20230205110012515

 上述代码中,最重要的是make_blobs函数的作用:

make_blobs的用法
data, label = make_blobs(n_features=2, n_samples=100, centers=3, random_state=3, cluster_std=[0.8, 2, 5])n_features表示每一个样本有多少特征值
n_samples表示样本的个数
centers是聚类中心点的个数,可以理解为label的种类数
random_state是随机种子,可以固定生成的数据
cluster_std设置每个类别的方差

 可以看出原来的代码片段中,只有n_features有个默认值,

image-20230205111305164

在这里插入图片描述

 总而言之,就是就是生成了数据,特征和标签都生成了。

代码片段2np.linespace

 np.linespace()函数生成指定范围内指定个数的一维数组

xfit = np.linspace(-1, 3.5)

 上述的代码片段,用来生成数组

 函数声明如下:

def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None):

1.在指定的间隔[“start”,“stop”]内均匀地返回数字。
2.返回“num”个等间距的样本。
3.endpoint是一个bool类型的值,如果为"Ture",“stop"是最后一个值,如果为"False”,生成的数组不会包含"stop"值
4.retstep是一个bool类型的值,如果为"Ture",会返回样本之间的间隙。

 从上述的函数声明可以看出,默认生成的数组的个数为50,包含stop作为最后一个值。可以在Jupyter进行如下的验证:

在这里插入图片描述

 可以同时返回样本之间的间隙,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMOOXv1I-1676950443503)(null)]

注: 可以多次运行这个表达式,生成的数据是一样的。

image-20230205112716743

代码片段之scatter

plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='spring')

x[:, 0]

 上述代码片段中,存在的疑惑主要是x[:, 0]的表示以及各个参数的含义,

 在numpy中,x[m,n]是通过numpy库引用数组或矩阵中的某一段数据集的一种写法。

x[:,n]或者x[n,:]

x[:,n]表示在全部数组(维)中取第n个数据,直观来说,x[:,n]就是取所有集合的第n个数据

 举例说明:

import numpy as np  X = np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]])  
print X[:,0]  

img

 而相应的,x[:, 1]则表示

img

x[n,:]表示在n个数组(维)中取全部数据,直观来说,x[n,:]就是取第n集合的所有数据, x[1,:]即取第一维中下标为1的元素的所有值

img

 扩展用法:x[:,m:n],即取所有数据集的第m到n-1列数据

X = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17],[18,19,20]])
print X[:,1:3]

 取所有维数据从从第1列到3-1列数据。因此结果为:

img

scatter

# plt.scatter()函数用于生成一个scatter散点图。
matplotlib.pyplot.scatter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, hold=None, **kwargs)

 参数含义如下:

  • x,y:表示的是shape大小为(n,)的数组,也就是我们即将绘制散点图的数据点,输入数据。
  • s:表示的是大小,是一个标量或者是一个shape大小为(n,)的数组,可选,默认20。
  • c:表示的是色彩或颜色序列,可选,默认蓝色’b’。但是c不应该是一个单一的RGB数字,也不应该是一个RGBA的序列,因为不便区分。c可以是一个RGB或RGBA二维行数组。
  • marker:MarkerStyle,表示的是标记的样式,可选,默认’o’。
  • cmap:Colormap,标量或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。如果没有申明就是image.cmap,可选,默认None。
  • norm:Normalize,数据亮度在0-1之间,也是只有c是一个浮点数的数组的时候才使用。如果没有申明,就是默认None。
  • vmin,vmax:标量,当norm存在的时候忽略。用来进行亮度数据的归一化,可选,默认None。
  • alpha:标量,0-1之间,可选,默认None。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oHbWwFVH-1676950439381)(null)]

参数marker

 marker控制的是标记的样式,常见的可以有’o’, ‘+’, ‘*’

image-20230205123636548

image-20230205123644210

image-20230205123654233

参数c

  • c:表示的是色彩或颜色序列,可选,默认蓝色’b’。但是c不应该是一个单一的RGB数字,也不应该是一个RGBA的序列,因为不便区分。c可以是一个RGB或RGBA二维行数组。

在这里,c是一个序列,维数与样本的个数相等。

 该参数的默认值为‘b’,表示蓝色。效果如下:

image-20230205123939039

 表示的是颜色。默认是蓝色’b’,表示的是标记的颜色,或者可以是一个表示颜色的字符,或者是一个长度为n的表示颜色的序列等等如**‘b’=blue,‘y’=yellow,‘k’=black**等

cmap

 cmap:Colormap,标量或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。如果没有申明就是image.cmap,可选,默认None。

参见 cmap的详细解释

在这里需要注意的是,plt.cm.Spectral是一个颜色映射集,但是,并不是说0~5各代表了某个颜色。而是说,参数c的序列中出现了5个不同的值,然后为每一个值分配一个颜色。

示例如下:

a = np.array([1,2,3,4,5])
b= np.array([6,7,8,9,10])
c = np.array([0,1,2,3,4])
plt.scatter(a,b,c=[0,1,0,1,0],s=80,cmap=plt.cm.Spectral)

img

 使用字符串也可以输入,允许的内容如下:

ValueError: 'xx' is not a valid value for name; supported values are 'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot', 'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'crest', 'crest_r', 'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'flare', 'flare_r', 'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r', 'gray', 'gray_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 'icefire', 'icefire_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'magma', 'magma_r', 'mako', 'mako_r', 'nipy_spectral', 'nipy_spectral_r', 'ocean', 'ocean_r', 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 'rocket', 'rocket_r', 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight', 'twilight_r', 'twilight_shifted', 'twilight_shifted_r', 'viridis', 'viridis_r', 'vlag', 'vlag_r', 'winter', 'winter_r'

注:cmap = plt.cm.Spectral实现的功能是给label为1的点一种颜色,给label为0的点另一种颜色。

 确实也没太理解这个参数的具体控制,感觉像是能够控制颜色的变化和风格。

代码片段之绘制直线

# 其实随意给定3组参数,就可以画出3条不同的直线,但它们都可以把图上的2类样本点分隔开
for m, b, d in [(1, 0.65, 0.33), (0.5, 1.6, 0.55), (-0.2, 2.9, 0.2)]:yfit = m * xfit + bplt.plot(xfit, yfit, '-k')plt.fill_between(xfit, yfit - d, yfit + d, edgecolor='none', color='#AAAAAA', alpha=0.4)plt.xlim(-1, 3.5);

在这里插入图片描述

 如果仅有for循环,可以看到,仅仅绘制一条线。把散点图的绘制放在一个cell中运行,可以看到完整的效果

image-20230205125708012

plt.plot函数

 参见plot详解

plt.plot()函数是matplotlib.pyplot模块下的一个函数, 用于画图

 它可以绘制点和线, 并且对其样式进行控制.

示例:

import matplotlib.pyplot as pltx=[3,4,5] # [列表]
y=[2,3,2] # x,y元素个数N应相同
plt.plot(x,y)
plt.show()

img

 plt.plot(x, y, “格式控制字符串”)

 format_string参见 控制格式字符串

在这里插入图片描述

 所以,'-k’表示的是黑色实线。

plt.fill_between

 plt.fill_between(x, y1, y2),其中x是横坐标,y1和y2是两条曲线,这个函数的作用是用颜色填充y1和y2这两条曲线之间的区域。

 该函数最常用的用法是已知均值曲线和标准差,画出标准差覆盖的区域

 参见 fill_between总结

只需要循环填充你想要填充的部分,设置填充的上下限,就可以实现这个功能了

在这里插入图片描述

xlim

 plt.xlim() 显示的是x轴的作图范围,同时plt.ylim() 显示的是y轴的作图范围,而 plt.xticks() 表达的是x轴的刻度内容的范围

1 plt.xlim(num1, num2)
2 plt.xlim(xmin=num1,xmax=num2)

 用于设置x轴的范围。

总结

 在这个小程序中,使用numpy的数据生成功能(np.linespace),散点图绘制功能,在绘制散点图plt.scatter的时候,可以控制形状、颜色、大小,然后使用了matplotlib库进行直线的绘制。同时对于直线上下的可以进行填充fill_between,使用xflim控制x轴的范围。


http://www.ppmy.cn/news/26796.html

相关文章

生态应用:探讨 NGINX 与上下游系统集成时的开发经验

NGINX 作为一款高性能的 Web 服务器和反向代理服务器,在各种应用场景中广泛应用。随着业务的发展,我们在使用 NGINX 时,可能需要将其与其他系统进行集成,以实现更加复杂的业务需求。 本文将结合实际应用场景,探讨 NGI…

带你一步步搭建Web自动化测试框架

测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程。另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人。本章和下一张…

Linux之网络流量监控工具ntopng YUM安装

一、ntopng简介 Ntop是一种监控网络流量工具,用ntop显示网络的使用情况比其他一些网络管理软件更加直观、详细。Ntop甚至可以列出每个节点计算机的网络带宽利用率。他是一个灵活的、功能齐全的,用来监控和解决局域网问题的工具;尤其当ntop与n…

非标题党:前端Vue React 项目编程规范化配置(大厂规范)

前端项目编程规范化配置 下述例子主要是从 代码规范化 以及 git 提交规范化 两方面进行配置。内容很多,请做好心理准备 一、代码检测工具 ESLint 在我们通过 vue create “项目名” 时,我们可以通过手动配置的方式,来配置 ESLint 来对代码进…

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()]

python 绘图 —— 绘制从顶部向底部显示的柱形图[ax.bar()] 效果图如下所示: 就是这个样子,一般比较少见将柱形图从上往下绘制的。可能是会为了更好的展示数据对比结果吧。这里绘图的主要思路如下: 利用ax.twinx()这个函数生成一个新的x轴…

双因素方差分析全流程

上篇文章讲述了“单因素方差分析全流程总结”,单因素方差分析只是考虑了一个自变量(定类)与一个因变量(定量)之间的关系,但是在实际问题研究中可能研究两个或者几个因素与因变量之间的关系,例如…

鼠标指针文件格式解析

鼠标指针文件格式解析 文章目录鼠标指针文件格式解析windowsico文件格式分析文件头:图像数据头段:图像数据段:Ani动态光标格式解析数据结构:anihseq **rate**LISTcur静态光标文件格式解析macOSLinuxwindows ico文件格式分析 是一…

1-MATLAB APP Design-图像的输入与输出

一、APP 界面设计展示 新建一个空白的APP,在此次的学习中,我们会用到编辑字段(文本框)、 按钮、坐标区和面板,首先在界面中拖入一个编辑字段(文本框),在文本框中输入内容:图形的输入与输出,调整背景颜色,字体的颜色为黑色,字体的大小调为25.

UG NX二次开发(C#)-CAM-不再高亮显示所有的加工特征(CAMFeature)

文章目录 1、前言2、加工特征高亮显示的示例3、获取加工特征的几何对象3.1 获取面对象并取消高亮显示3.2 获取坐标系对象并取消高亮显示4、创建一个不再高亮显示所有加工特征的方法1、前言 当我们在识别加工特征后,其默认状态是被选中的,所以是高亮显示;当我们不再选中时,…

06- OpenCV查找图像轮廓 (OpenCV基础) (机器视觉)

知识重点 灰度图转换: gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)二值化: 返回两个东西,一个阈值, 一个是二值化的图: thresh, binary cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)查找轮廓: 返回两个结果,分别是轮廓和层级: c…

【C语言】浮点型数据在内存中的存储

🚀🚀🚀 如果文章对你有帮助不要忘记点赞关注收藏哦🚀🚀🚀 文章目录⭐浮点数在内存中的存储1.1 🤓举个例子:1.2浮点数存储规则🌈:对于M与E有一些特别规定1.3解释前面题目&…

STM32开发(11)----CubeMX配置独立看门狗(IWDG)

CubeMX配置独立看门狗(IWDG)前言一、独立看门狗的介绍二、实验过程1.STM32CubeMX配置独立看门狗2.代码实现3.硬件连接4.实验结果总结前言 本章介绍使用STM32CubeMX对独立看门狗定时器进行配置的方法。门狗本质上是一个定时器,提供了更高的安…

嵌入式Qt 开发一个视频播放器

上篇文章:嵌入式 Qt开发一个音乐播放器,使用Qt制作了一个音乐播放器,并在OK3568开发板上进行了运行测试,实际测试效果还不错。 本篇继续来实现一个Qt视频播放器软件,可以实现视频列表的显示与选择播放等,先…

centos7下用kvm启动Fedora36 Cloud镜像

环境 os:centos7 Arch: aarch64 安装qemu-kvm yum install qemu-kvm kvm virt-install libvirt systemctl start libvirtd.service创建镜像 下载aarch64架构的Fedora36镜像 wget https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/36/Cloud/aarch64/images/Fedora-Cl…

PaddleSlim 模型量化 源代码解读

前言:paddleslim的中文资料非常丰富,在如何使用的教学上做的非常完善。但是源码解读与解析资料却非常少,这篇博客结合源代码大家一起学习一下paddle静态离线量化的原理和方法。 目录 原理简述 支持的量化类型 支持后端 量化操作 Prepara…

基于linux内核的驱动开发

1 自动创建设备文件 创建设备文件的方式:1 手动创建 sudo mknod /dev/haha0 c 250 0 2 自动创建--》使用内核函数 linux内核为我们提供了一组内核函数,用于在模块加载时自动在/dev目录下创建响应的设备文件&…

vue-element-admin在git 上 clone 之后无法install

一. 无法install的原因因为vue-element-admin引入的富文本编辑插件所导致 由于tui-editor变更 名字 导致 依赖查询找不到对应的版本二. 解决的办法先删掉package.json中tui-editor:1.3.3找到 \src\components\MarkdownEditor\index.vue 把所有的import 替换成下面4个import cod…

【Kubernetes】【十九】安全认证

第九章 安全认证 本章节主要介绍Kubernetes的安全认证机制。 访问控制概述 ​ Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 客户端 在Kubernetes集群…

23春招-mysql事务相关高频面试题

1、什么是事务 对于一个事务,要么事务内的sql全部执行,要么都不执行 2、 事务的特性ACID 原子性 整个事务中所有的操作要么全部提交成功,要么全部失败会滚。 一致性 数据库总是从一个一致性状态转换到另一个一致性状态。假如有三个sql语句…

Nginx 部署 Vue 项目以及 Vue 项目刷新出现 404 的问题(完整步骤)(亲测有效)

Nginx 部署 Vue 项目以及 Vue 项目刷新出现 404 的问题(完整步骤)(亲测有效) 1.流程步骤(本教程下载的是1.20.2版本,放在D盘) 1-1. 首先去官方下载 nginx ,然后在当前目录下创建ht…