机器学习 | 基于网格搜索的SVM超参数调节

机器学习模型被定义为一个数学模型,其中包含许多需要从数据中学习的参数。然而,有一些参数,称为超参数,这些参数不能直接学习。它们通常是由人类在实际训练开始前根据直觉或经验和试验选择的。这些参数通过提高模型的性能(例如其复杂性或学习率)来展示其重要性。模型可以有许多超参数,找到参数的最佳组合可以被视为搜索问题。

SVM也有一些超参数(如使用什么C或伽马值),找到最佳超参数是一个非常困难的任务。但它可以通过尝试所有组合来找到,看看什么参数最有效。它背后的主要思想是创建一个超参数网格,并尝试所有的组合(因此,这种方法被称为网格搜索Gridsearch。)

Scikit-learn中内置的GridSearchCV采用一个字典来描述可以在模型上尝试的参数来训练它。参数网格被定义为字典,其中键是参数,值是要测试的设置。

本文演示了如何使用GridSearchCV搜索方法来找到最佳超参数,从而提高准确性/预测结果。

导入必要的库并获取数据

import pandas as pd 
import numpy as np 
from sklearn.metrics import classification_report, confusion_matrix 
from sklearn.datasets import load_breast_cancer 
from sklearn.svm import SVC cancer = load_breast_cancer() # The data set is presented in a dictionary form: 
print(cancer.keys()) 

输出

dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])

现在,我们将所有特征提取到新的数据框中,并将目标特征提取到单独的数据框中。

df_feat = pd.DataFrame(cancer['data'], columns = cancer['feature_names']) # cancer column is our target 
df_target = pd.DataFrame(cancer['target'], columns =['Cancer']) print("Feature Variables: ") 
print(df_feat.info()) 

输出
在这里插入图片描述

print("Dataframe looks like : ") 
print(df_feat.head()) 

在这里插入图片描述

划分训练集和测试集

现在,我们将以70:30的比例将数据分为训练集和测试集

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( df_feat, np.ravel(df_target), test_size = 0.30, random_state = 101) 

1. 训练基于无需超参数调整的SVM

首先,我们将通过调用标准SVC()函数来训练我们的模型,而不进行超参数调整,并查看其分类和混淆矩阵。

# train the model on train set 
model = SVC() 
model.fit(X_train, y_train) # print prediction results 
predictions = model.predict(X_test) 
print(classification_report(y_test, predictions)) 

输出
在这里插入图片描述
我们有61%的准确率,但你有没有注意到一些奇怪的事情?

注意,类0的查全率和查准率始终为0。这意味着分类器总是把所有东西都分类到一个类中,即类1!这意味着我们的模型需要调整其参数。

这就是GridSearch的用处。我们可以使用GridSearch搜索参数!

2.使用GridsearchCV

GridSearchCV的一个伟大之处在于它是一个元估计器。它采用像SVC这样的估计器并创建一个新的估计器,其行为完全相同。在这种情况下,就像分类器一样。您应该添加 refit=True 并选择verbose到您想要的任何数字,数字越大,越详细(verbose只是表示描述过程的文本输出)。

from sklearn.model_selection import GridSearchCV # defining parameter range 
param_grid = {'C': [0.1, 1, 10, 100, 1000], 'gamma': [1, 0.1, 0.01, 0.001, 0.0001], 'kernel': ['rbf']} grid = GridSearchCV(SVC(), param_grid, refit = True, verbose = 3) # fitting the model for grid search 
grid.fit(X_train, y_train) 

fit所做的事情比平常要复杂一些。首先,它使用交叉验证运行相同的循环,以找到最佳参数组合。一旦找到最佳组合,它会对传递给拟合的所有数据再次运行拟合(没有交叉验证),以使用最佳参数设置构建一个新模型。

您可以在best_params_ attribute中检查GridSearchCV找到的最佳参数,并在best_estimator_ attribute中检查最佳估计量:

# print best parameter after tuning 
print(grid.best_params_) # print how our model looks after hyper-parameter tuning 
print(grid.best_estimator_) 

输出
在这里插入图片描述
然后,您可以重新运行预测并查看此网格对象的分类报告,就像使用普通模型一样。

grid_predictions = grid.predict(X_test) # print classification report 
print(classification_report(y_test, grid_predictions)) 

输出
在这里插入图片描述
我们已经得到了近95%的预测结果。

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

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

相关文章

网络协议梳理

1 引言 在计算机网络中要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的(即同频或同频同相)而是广义的,即在一定的条件下应当发生什…

每日一题——LeetCode1403.非递增顺序的最小子序列

方法一 个人方法: 按题目要求,尽可能先取出nums里最大的值,这样才能满足子序列尽可能短且元素之和最大 var minSubsequence function(nums) {nums.sort((a,b)>a-b)let sum1nums.reduce((a,b)>ab,0),sum20,res[]while(sum1>sum2){…

【并发编程】原子累加器

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳重求进,晒太阳 JDK8之后有专门做累加的类,效率比自己做快数倍以上 累加器性能比较 参数是方法 // supplier 提供者 无中生有 ()->结果// func…

golang并发安全-sync.Once

什么是sync.Once sync.Once 是 Go 语言中的一种同步原语,用于确保某个操作或函数在并发环境下只被执行一次。它只有一个导出的方法,即 Do,该方法接收一个函数参数。在 Do 方法被调用后,该函数将被执行,而且只会执行一…

Excel——高级筛选匹配条件提取数据

一、筛选多条件 Q:筛选多个条件,并将筛选出的内容复制到其他区域 点击任意一个单元格 点击【数据】——【筛选】——【高级筛选】 选择【将筛选结果复制到其他位置】——在【列表区域】 鼠标选择对应的区域位置,条件区域一定要单独写出来&a…

政安晨:示例演绎Python的函数与获取帮助的方法

调用函数和定义我们自己的函数,并使用Python内置的文档,是成为一位Pythoner的开始。 通过我的上篇文章,相信您已经看过并使用了print和abs等函数。但是Python还有许多其他函数,并且定义自己的函数是Python编程的重要部分。 在本…

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…

将xyz格式的GRACE数据转成geotiff格式

我们需要将xyz格式的文件转成geotiff便于成图,或者geotiff转成xyz用于数据运算,下面介绍如何实现这一操作,采用GMT和matlab两种方法。 1.GMT转换 我们先准备一个xyz文件,这里是一个降水文件。在gmt中采用以下的语句实现xyz转grd…

java synchronized浅析

介绍synchronized synchronized 是Java编程语言中的一个关键字,用于实现线程间的同步。在多线程环境下,它确保了共享资源在同一时刻只能被一个线程访问或修改,从而避免了因多个线程并发操作同一数据而导致的数据不一致和竞态条件。 synchroni…

070:vue+cesium: 利用canvas设置径向渐变色材质

相关API参考: https://cesium.com/learn/cesiumjs/ref-doc/ColorMaterialProperty.html 第070个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置线性渐变色的材质,这里使用canvas的辅助方法。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. …

阴阳家邹衍的五行相生相克,比星座更火爆

古天乐主演的《寻秦记》,有一个老头叫“邹夫子”,他就是战国的邹衍。 邹衍年轻时,去齐国的稷下学宫,学习儒家。了解到天有五种德行,分别是仁、义、礼、智、信。 《尚书洪范》记载:“五行:一曰水…

springboot155基于JAVA语言的在线考试与学习交流网页平台

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

2024最新版Sublime Text 4安装使用指南

2024最新版Sublime Text 4安装使用指南 Installation and Usage Guide to the Latest Sublime Text 4 in 2024 By JacksonML 0. Sublime Text是什么? Sublime Text 由自定义组件构建,支持Python, Java, C/C等多种编程语言,并为用户提供无与…

vue2.0+使用md-edit编辑器

前言:小刘开发过程中,如果是博客项目一般是会用到富文本。众多富文本中,小刘选择了markdown,并记录分享了下来。 # 使用 npm npm i kangc/v-md-editor -Smain.js基本配置import VueMarkdownEditor from kangc/v-md-editor; import…

数模.matlab画图

一、mesh函数 上图是平常用到的方式 例题: 上图的meshgrid函数相当于上上图的前三个指令(temp,x,y) mash函数: mashc函数: mashz函数: 上图subplot函数的作用是将下标为index的图片放到对应的x&…

十年炒股心得

蒙在股里 天朝老李 十年炒股两茫茫,先亏车,再赔房。 千古跌停无处话凄凉。 纵有涨停应不识,人跌傻,本赔光。 牛市幽梦难还乡,睡不着,吃不香。 望盘无言,惟有泪千行。 料得年年断肠处&…

基于Springboot开发的物品捎带系统[附源码]

基于Springboot开发的物品捎带系统[附源码] 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 &#x1f…

安卓Termux+Hexo博客框架快速搭建本地网站并实现公网访问

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

计算机网络原理基础

目录 前言: 1.网络发展史 2.网络通信基础 2.1IP地址 2.1.1定义 2.1.2格式 2.2端口号 2.2.1定义 2.2.2格式 2.3协议 2.3.1定义 2.3.2作用 2.3.3分层 2.4五元组 2.4.1定义 2.4.2组成 3.TCP/IP五层网络模型 3.1模型概念 3.2模型构成 3.3网络分层对应…

SpringBoot 过滤器Filter的过滤链 多个过滤器优先级

SpringBoot 过滤器Filter 拦截请求 生命周期 什么是过滤链? 指的是有多个过滤器形成的过滤链,一个项目中可以存在多个过滤器。 优先级 根据字母排序,如XFilter和AFilter,那么按照顺序应该先到AFilter过滤器当中