【Python机器学习】SVM——调参

下面是支持向量机一个二维二分类数据集的训练结果:


import mglearn
import matplotlib.pyplot as plt
from sklearn.svm import SVCplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
X,y=mglearn.tools.make_handcrafted_dataset()
svm=SVC(kernel='rbf',C=10,gamma=0.1).fit(X,y)
mglearn.plots.plot_2d_separator(svm,X,eps=.5)
mglearn.discrete_scatter(X[:,0],X[:,1],y)
#画出支持向量
sv=svm.support_vectors_
#支持向量的类别标签由dual_coef_的正负号给出
sv_labels=svm.dual_coef_.ravel()>0
mglearn.discrete_scatter(sv[:,0],sv[:,1],sv_labels,s=15,markeredgewidth=3)
plt.xlabel('特征0')
plt.ylabel('特征1')
plt.show()

 决策边界用黑线表示,支持向量是尺寸比较大的点:

在这个例子里,SVM给出了非常平滑且线性的边界。

在上面的例子里,gamma参数用于控制高斯核的宽度,它决定了点与点之间“靠近”是指多大的距离,C参数是正则化参数,与线性模型类似,它限制了每个点的重要性(dual_coef_)。

用一个例子展示改变参数的结果:


import mglearn
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsefig,axes=plt.subplots(3,3,figsize=(15,10))
for ax,C in zip(axes,[-1,0,3]):for a,gamme in zip(ax,range(-1,2)):mglearn.plots.plot_svm(log_C=C,log_gamma=gamme,ax=a)
axes[0,0].legend(['分类0','分类1','sv分类0','sv分类1'],ncol=4,loc=(.9,1.2))
plt.show()

gamma较小,说明高斯核的半径较大,许多点都被看做比较相近,在图中可以看到,左边的图决策边界非常平滑,越往右的图决策边界更关注单个的点。大的gamma值会生成更复杂的模型。

与线性模型相同,C越小,说明模型非常受限,每个数据点的影响范围都有限。

默认情况下,C和gamma都等于1:

import numpy as np
from sklearn.datasets import make_blobs
import mglearn
import matplotlib.pyplot as plt
from sklearn.svm import LinearSVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from mpl_toolkits.mplot3d import Axes3D,axes3d
from sklearn.svm import SVCplt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
cancer=load_breast_cancer()
X_train,X_test,y_train,y_test=train_test_split(cancer.data,cancer.target,random_state=0)svc=SVC(C=1,gamma=1)
svc.fit(X_train,y_train)
print('训练集精度:{:.2f}'.format(svc.score(X_train,y_train)))
print('测试集精度:{:.2f}'.format(svc.score(X_test,y_test)))plt.plot(X_train.min(axis=0),'o',label='min')
plt.plot(X_train.max(axis=0),'^',label='max')
plt.legend(loc=4)
plt.xlabel('特征index')
plt.ylabel('特征大小')
plt.yscale('log')
plt.show()

这个模型在训练集上的分数非常完美,但是测试集上的精度只有0.63,存在非常严重的过拟合,SVM对参数的设置和数据的缩放都非常敏感。

特征的最大最小值:

可以看到,数据集特征具有完全不同的数量级,这对核SVM有极大影响。

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

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

相关文章

ModuleNotFoundError: No module named ‘simple_knn‘

【报错】使用 AutoDL 复现 GaussianEditor 时引用 3D Gaussian Splatting 调用simple_knn 时遇到 ModuleNotFoundError: No module named ‘simple_knn‘ 报错: 【原因】 一开始以为是版本问题,于是将所有可能的版本都尝试了 (from versions: 0.1, 0.2…

笔试面试题——继承和组合

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、什么是菱形继承?菱形继承的问题是什么?二、什么是菱形虚拟继承&am…

SqlAlchemy使用教程(一) 原理与环境搭建

一、SqlAlchemy 原理及环境搭建 SqlAlchemy是1个支持连接各种不同数据库的Python库,提供DBAPI与ORM(object relation mapper)两种方式使用数据库。 DBAPI方式,即使用SQL方式访问数据库 ORM, 对象关系模型,是用 Python…

1.1 计算机网络在信息时代的作用

1.1 计算机网络在信息时代的作用 网络(Network)由若干结点(Node)和连接这些结点的链路(Link)所组成。网络中的结点可以是计算机、集线器、交换机或者路由器等。 图1-1 多个网络还可以通过路由器互连起来&a…

记录一下误删除libc.so.6的经历

起因: 在配置环境时,出现’GLIBCXX_3.4.29 not found’的错误,在解决这个问题的过程中,需要删除sudo rm /usr/lib/x86_64-linux-gnu/libstdc.so.6软连接,但是一不小心sudo rm /lib/x86_64-linux-gpu/libc.so.6&#xf…

使用主题模型和古老的人类推理进行无监督文本分类

一、说明 我在日常工作中不断遇到的一项挑战是在无法访问黄金标准标签的情况下标记文本数据。这绝不是一项微不足道的任务,在本文中,我将向您展示一种相对准确地完成此任务的方法,同时保持管道的可解释性和易于调整。 一些读者可能已经开始考…

docker-compose一键搭建zookeeper集群

1、setup.sh setup.sh脚本用来创建本地文件夹,这些文件夹会被挂载到docker容器。 #!/bin/bashmkdir -p "$PWD\zoo1\data" mkdir -p "$PWD\zoo1\datalog"mkdir -p "$PWD\zoo2\data" mkdir -p "$PWD\zoo2\datalog"mkdir -p…

计算机缺失msvcp120.dll的最新解决方法,实测可以完美修复

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp120.dll丢失”。msvcp120.dll是Microsoft Visual C Redistributable Package的一部分,它是运行许多基于Windows操作系统的应用程序所必需的动态链接库文件之一。如果计算机…

Jetson_yolov8_解决模型导出.engine遇到的问题、使用gpu版本的torch和torchvision、INT8 FP16量化加快推理

1、前情提要 英伟达Jetson搭建Yolov8环境过程中遇到的各种报错解决(涉及numpy、scipy、torchvision等)以及直观体验使用Yolov8目标检测的过程(CLI命令行操作、无需代码)-CSDN博客和YOLOv8_测试yolov8n.pt,yolov8m.pt训…

[C#]winform部署yolov5-onnx模型

【官方框架地址】 https://github.com/ultralytics/yolov5 【算法介绍】 Yolov5,全称为You Only Look Once version 5,是计算机视觉领域目标检测算法的一个里程碑式模型。该模型由ultralytics团队开发,并因其简洁高效的特点而备受关注。Yol…

nova组件讲解和glance对接swift

1、openstack架构 (1)openstack是一种SOA架构(微服务就是从这种架构中剥离出来的) (2)这种SOA架构,就是把每个服务独立成一个组件,每个组件通过定义好的api接口进行互通 &#xff…

使用递归将list转换成tree

在产品研发时遇到这样一个问题,对于省市区县这类三级联动的数据,前端插件需要一次把数据全部返回,单纯的使用接口查询字节的没办法满足要求。 如果一次把数据全部返回,前端使用起来很麻烦需要一条一条的进行查找。 常规的使用方…

软件测试|解读Python的requirements.txt文件:管理项目依赖的完整指南

简介 在Python项目中,管理依赖库是必不可少的。requirements.txt文件是一种常用的方式,用于列出项目所需的所有依赖库及其版本。本文将详细介绍requirements.txt的用法,帮助你更好地管理项目的依赖。 使用步骤 创建requirements.txt文件&am…

2024 爱分析 · AI 与大模型高峰论坛:和鲸喜获两项殊荣!

1 月 9 日下午,“2024 爱分析 AI 与大模型高峰论坛”在京举办。本次论坛以“智能涌现,价值焕新”为主题,汇聚众多专家学者、实践先驱,共同探讨 AI 与大模型在企业内的新场景、新价值、新路径。论坛中,和鲸科技成功入选…

全网最全postman接口测试教程和项目实战~从入门到精通!!!

Postman实现接口测试内容大纲一览: 一、什么是接口?为什么需要接口? 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷①

单元测试 一、任务要求 题目1:根据下列流程图编写程序实现相应分析处理并显示结果。返回文字“xa*a*b的值:”和x的值;返回文字“xa-b的值:”和x的值;返回文字“xab的值:”和x的值。其中变量a、b均须为整型…

力扣120. 三角形最小路径和(Java 动态规划)

Problem: 120. 三角形最小路径和 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 Problem:64. 最小路径和 本题目可以看作是在上述题目的基础上改编而来,具体的思路: 1.记录一个int类型的大小的 n 乘 n n乘n n乘n的数组(其中 n n n为…

使用 Github、Hugo 搭建个人博客

Hugo 静态网站构建手册:https://jimmysong.io/hugo-handbook/ 关键字:开源 博客 框架 1、GitHub Pages 官网:https://pages.github.com/ 文档:https://docs.github.com/zh Github Pages 简介 Websites for you and your project…

HarmonyOS——ArkUI状态管理

一、状态管理 在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&…

python 异常处理 try...except...finally..

python 异常处理: 简单的异常处理主要依靠内置异常处理结构体,代码结构如下: try: … except ValueError as e: # 异常判断,出现ValueError错误时处理机制 … except ZeroDivisionError as e: # 异常判断,出现ZeroDiv…