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

news2024/12/25 9:01:41
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-learn

Installing 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 + b
    plt.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 plt
 
x=[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.coloradmin.cn/o/360703.html

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

相关文章

Qt-QProcess-启动子进程-控制台进程隐藏-获取子进程标准输出和返回码

文章目录1.隐藏控制台程序1.1.控制台程序生成即隐藏1.2.调用程序隐藏控制台2.QProcess2.1.基础用法-start和startDetached2.2.获取子进程的标准输出3.代码范例3.1.等待进程执行完毕,获取所有的输出3.2.子进程返回信号3.3.进程是否启动3.4.执行命令行3.5.与子进程交互…

GIT客户端安装

步骤1:运行“Git-2.13.1-64-bit.exe”,并点击“运行”按钮(默认)步骤2:许可信息页面,点击“Next”(默认)步骤3:选择安装路径(默认)步骤4&#xff…

记一次 .NET 某医保平台 CPU 爆高分析

一:背景 1. 讲故事 一直在追这个系列的朋友应该能感受到,我给这个行业中无数的陌生人分析过各种dump,终于在上周有位老同学找到我,还是个大妹子,必须有求必应 😁😁😁。 妹子公司的…

IDEA高效插件和设置

安装好Intellij idea之后,进行如下的初始化操作,工作效率提升十倍。 一. 安装插件 1. Codota 代码智能提示插件 只要打出首字母就能联想出一整条语句,这也太智能了,还显示了每条语句使用频率。 原因是它学习了我的项目代码&…

力扣-从不订购的客户

大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:183. 从不订购的客户二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果总结前言…

2月编程语言排行榜谁还没有看?

近日,TIOBE公布了2023年2月编程语言排行榜,本月各个语言表现如何?谁又摘得桂冠?一起来看看吧! TIOBE 2月Top15编程语言: 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴们…

Qt音视频开发15-动态切换解码内核的设计

一、前言 动态切换解码内核这个需求也是源自客户的真实需求,既然是动态切换,那肯定是运行期间切换,而不是通过改变标志位重新编译程序来切换,最开始做的就是这种方式,这样就是实现起来简单,但是用起来不够…

OpenGL ES基础简介

简介 视频的渲染源是 YUV 或者 RGBA 格式的数据,这种数据是描述画面最基础的格式,其中 YUV 常用在视频的原始格式中,RGBA 常用在一些图像的原始格式上。 目前各个平台最终渲染到屏幕上的都是 RGBA 格式的,因为硬件对屏幕上的设计…

【可视化实战】Python 绘制出来的数据大屏真的太惊艳了

今天我们在进行一个Python数据可视化的实战练习,用到的模块叫做Panel,我们通过调用此模块来绘制动态可交互的图表以及数据大屏的制作。 而本地需要用到的数据集,可在kaggle上面获取 https://www.kaggle.com/datasets/rtatman/188-million-us…

SpringBoot之DEBUG远程调试黑科技?

所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地 的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道 远程服务端的此时的内部状态。 简单的…

计算机408考研先导课---C语言难点

以下为小编在重温C语言时,容易犯错的一些点,希望列出来对大家有一定帮助! 一、整型变量数的范围 类型说明符长度(字节)数的范围int4/2(有些为4字节,有些为2字节)-32768~32767short2…

ArcMap出图小技巧:主图设计、图例、比例尺、指北针、标题

ArcMap一个重要的功能是出图!!!!! 因为图片对于一些文字描述来说更为直观,所以掌握一些出图技巧也是极为重要的,不仅能让我们在数据处理过程快速得到我们想要的图层,也可以让图层看起…

Teradata退了? 无所谓,GBASE会出手

近期,就在2月15日,国内IT界有搞出个大瓜,Teradata以对中国当前及未来商业环境的不确定性,慎重考虑后决定退出中国运营,后续将进入中国公司关闭程序。Teradata是一家有着40多年历史的数据仓库企业,被业界专业…

动态规划从入门到精通-蓝桥杯

一、了解动态规划1.简单来说动态规划是一种状态转移与递推2.例题引入——最少硬币问题有多个不同面值的硬币(任意面值); 数量不限; 输入金额S,输出最少硬币组合。 (回顾用贪心求解硬币问题。)贪心法硬币面值1、2、5。支…

2023年中职网络安全竞赛跨站脚本渗透解析-2(超详细)

跨站脚本渗透 任务环境说明:需求环境可私信博主! 服务器场景:Server2126(关闭链接)服务器场景操作系统:未知访问服务器网站目录1,根据页面信息完成条件,将获取到弹框信息作为flag提交;访问服务器网站目录2,根据页面信息完成条件,将获取到弹框信息作为flag提交;访问…

CenterMask paper笔记

CenterMask是一个anchor free的实例分割模型, 来自paper: CenterMask: Real-Time Anchor-Free Instance Segmentation 提起anchor free, 会想到FCOS模型,是用来目标检测的, 那么这里就用到了FCOS, 不过换了backbone, 在FCOS检测出目标框后&…

插装式比例插装阀比例节流阀比例顺序阀放大器

都是直动式,不需要最小先导压力以及先导流量。它们的动作执行都是基于平衡力的设计理念。(电磁力能按比例地反作用于液压力)所有的比例螺线管都是按照5000psi(350bar)的标准设计,所以这些阀的所有口都可以承…

卷积网络与全连接网络的区别

问题卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此也被称为“平移不变人工神经网络。全连接神经网络是具有多层感知器的的网络&a…

vs2022 实现无线调试安卓(Windows)

文章目录VS安装安卓调试环境前提条件Android SDK 版本查看安卓开启无线调试开启开发者模式打开USB调试功能打开无线调试功能查看配对信息(再次点击无限调试,不是switch开关)准备电脑端输入adb命令配对安卓查看设备清单如果没有设备VS无线调试…

python--matplotlib(3)

前言 Matplotlib画图工具的官网地址是 http://matplotlib.org/ Python环境下实现Matlab制图功能的第三方库,需要numpy库的支持,支持用户方便设计出二维、三维数据的图形显示,制作的图形达到出版级的标准。 其他matplotlib文章 python--matpl…