网格搜索法

2023-05-16

网格搜索法是指定参数值的一种穷举搜索方法,通过将估计函数的参数通过交叉验证的方法进行优化来得到最优的学习算法。

即,将各个参数可能的取值进行排列组合,列出所有可能的组合结果生成“网格”。然后将各组合用于SVM训练,并使用交叉验证对表现进行评估。在拟合函数尝试了所有的参数组合后,返回一个合适的分类器,自动调整至最佳参数组合,可以通过clf.best_params_获得参数值

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_32547403/article/details/73008127

交叉验证与网格搜索

交叉验证与网格搜索是机器学习中的两个非常重要且基本的概念,但是这两个概念在刚入门的时候并不是非常容易理解与掌握,自己开始学习的时候,对这两个概念理解的并不到位,现在写一篇关于交叉验证与网格搜索的文章,将这两个基本的概念做一下梳理。

网格搜索

网格搜索(Grid Search)名字非常大气,但是用简答的话来说就是你手动的给出一个模型中你想要改动的所用的参数,程序自动的帮你使用穷举法来将所用的参数都运行一遍。决策树中我们常常将最大树深作为需要调节的参数;AdaBoost中将弱分类器的数量作为需要调节的参数。

评分方法

为了确定搜索参数,也就是手动设定的调节的变量的值中,那个是最好的,这时就需要使用一个比较理想的评分方式(这个评分方式是根据实际情况来确定的可能是accuracy、f1-score、f-beta、pricise、recall等)

交叉验证

有了好的评分方式,但是只用一次的结果就能说明某组的参数组合比另外的参数组合好吗?这显然是不严谨的,上小学的时候老师就告诉我们要求平均��。所以就有了交叉验证这一概念。下面以K折交叉验证为例介绍这一概念。

  1. 首先进行数据分割 
    将原始数据集分为训练集和测试集。如下图以8:2的方式分割: 
    png 
    训练集使用来训练模型,测试集使用来测试模型的准确率。 
    注意:绝对不能使用测试集来训练数据,这相当于考试的时候先让你把考试的答案背过了,又让你参加考试。
  2. 数据验真 
    在k折交叉验证方法中其中K-1份作为训练数据,剩下的一份作为验真数据:

png1 
这个过程一共需要进行K次,将最后K次使用实现选择好的评分方式的评分求平均返回,然后找出最大的一个评分对用的参数组合。这也就完成了交叉验证这一过程。

### 举例 下面使用一个简单的例子(预测年收入是否大于5万美元)来进行说明网格搜索与交叉验证的使用。 数据集来自[UCI机器学习知识库](https://archive.ics.uci.edu/ml/datasets/Census+Income)。

import numpy as np
import pandas as pd
from IPython.display import display
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import make_scorer, fbeta_score, accuracy_score
from sklearn.model_selection import GridSearchCV, KFold

%matplotlib inline 

data = pd.read_csv("census.csv")

# 将数据切分成特征和标签
income_raw = data['income']
features_raw = data.drop('income', axis=1)

# 显示部分数据
# display(features_raw.head(n=1))

# 因为原始数据中的,capital-gain 和 capital-loss的倾斜度非常高,所以要是用对数转换。
skewed = ['capital-gain', 'capital-loss']
features_raw[skewed] = data[skewed].apply(lambda x: np.log(x + 1))

# 归一化数字特征,是为了保证所有的特征均被平等的对待
scaler = MinMaxScaler()
numerical = ['age', 'education-num', 'capital-gain', 'capital-loss', 'hours-per-week']
features_raw[numerical] = scaler.fit_transform(data[numerical])
# display(features_raw.head(n=1))

# 独热编码,将非数字的形式转化为数字
features = pd.get_dummies(features_raw)
income = income_raw.replace(['>50K', ['<=50K']], [1, 0])

# 切分数据集
X_train, X_test, y_train, y_test = train_test_split(features, income, test_size=0.2, random_state=0)

# Adaboost
from sklearn.ensemble import AdaBoostClassifier
clf_Ada = AdaBoostClassifier(random_state=0)

# 决策树
from sklearn.tree import DecisionTreeClassifier
clf_Tree = DecisionTreeClassifier(random_state=0)

# KNN
from sklearn.neighbors import KNeighborsClassifier
clf_KNN = KNeighborsClassifier()

# SVM
from sklearn.svm import SVC
clf_svm = SVC(random_state=0)

# Logistic
from sklearn.linear_model import LogisticRegression
clf_log = LogisticRegression(random_state=0)

# 随机森林
from sklearn.ensemble import RandomForestClassifier
clf_forest = RandomForestClassifier(random_state=0)

# GBDT
from sklearn.ensemble import GradientBoostingClassifier
clf_gbdt = GradientBoostingClassifier(random_state=0)

# GaussianNB
from sklearn.naive_bayes import GaussianNB
clf_NB = GaussianNB()

scorer = make_scorer(accuracy_score)

# 参数调优

kfold = KFold(n_splits=10)
# 决策树
parameter_tree = {'max_depth': xrange(1, 10)}
grid = GridSearchCV(clf_Tree, parameter_tree, scorer, cv=kfold)
grid = grid.fit(X_train, y_train)

print "best score: {}".format(grid.best_score_)
display(pd.DataFrame(grid.cv_results_).T)

best score: 0.855737070514.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }

 012345678
mean_fit_time0.05625350.06921330.08851260.1102330.1283370.1587190.171240.1936370.223979
mean_score_time0.002404740.002282120.002215290.00260470.002267720.002542970.002314810.002466960.00256622
mean_test_score0.751140.8238110.8393450.8399260.8466710.8523920.8515080.8531390.855737
mean_train_score0.751140.824210.8396280.8405030.8478780.8533290.8552640.8592020.863667
param_max_depth123456789
params{u’max_depth’: 1}{u’max_depth’: 2}{u’max_depth’: 3}{u’max_depth’: 4}{u’max_depth’: 5}{u’max_depth’: 6}{u’max_depth’: 7}{u’max_depth’: 8}{u’max_depth’: 9}
rank_test_score987653421
split0_test_score0.7606410.82670.8438360.8446660.8515750.8557210.8554450.860420.859038
split0_train_score0.7500840.8238280.8391840.839430.8475380.8529130.8542950.8599470.863233
split1_test_score0.7581540.8211720.8391380.8424540.8452180.8496410.8477060.8507460.852957
split1_train_score0.7503610.8244420.8397060.8459110.8500880.8542030.8558310.8614820.864984
split2_test_score0.7548370.8242120.8402430.840520.84660.8546160.8543390.8540630.856551
split2_train_score0.7507290.8247180.8390310.8393070.8473230.8522370.8542030.8595780.86397
split3_test_score0.731620.8206190.8380320.8383080.84660.8507460.8485350.8468770.852957
split3_train_score0.7533090.8245030.8398290.8401060.8483370.8537420.855370.8581040.863171
split4_test_score0.7465450.8186840.833610.8338860.839690.8479820.8454950.850470.848811
split4_train_score0.7516510.8247180.8403210.8405970.8448970.8535580.8583190.8619120.864922
split5_test_score0.7542840.8261470.8449420.8452180.8540630.8590380.857380.8582090.861802
split5_train_score0.7507910.8238890.8390610.8393380.8473230.8527290.8541110.8569670.862741
split6_test_score0.7542840.8253180.8380320.8377560.8454950.8485350.8485350.8521280.857103
split6_train_score0.7507910.8239810.8398290.8401670.8484290.8537730.8556470.8577660.863141
split7_test_score0.7497930.8213990.8354990.8354990.8446230.852640.8520870.8537460.85264
split7_train_score0.751290.8244160.8401110.8404180.8483720.8535010.8549450.8608110.863882
split8_test_score0.7533870.8263750.8382640.838540.844070.8520870.8529170.8523640.858446
split8_train_score0.7508910.8238640.8398030.840080.8483720.8530710.8549450.8578010.863391
split9_test_score0.7478570.8274810.8418580.8424110.848770.8529170.852640.8523640.857064
split9_train_score0.7515050.8237410.8394040.8396810.8480960.8535630.8549750.8576470.863237
std_fit_time0.01235830.004427880.005520260.006316910.00531950.01570110.004769910.006228540.0147429
std_score_time0.0005292140.0004670910.0003550280.0007606240.0004608290.0005046270.0004462890.0004452560.000449312
std_test_score0.007698980.002924640.003331180.003587760.003824960.003244060.003604140.003663890.00363761
std_train_score0.0008554820.0003661660.0004189730.001852640.001246980.0005531710.001161510.001687320.000726325
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网格搜索法 的相关文章

  • TE、TM、TEM模式的区别

    在一众电磁仿真软件的使用中 xff0c 牵涉到平面波的设置或Floquet端口的设置 在设置平面波时 xff0c 论坛里有不少人提到TE波 TM波 xff1b 在设置Floquet端口时 xff0c 又有不少人提到TE极化 TM极化 其实
  • linux下TCP socket编程入门案例(二)——非阻塞的TCP server&client

    文章目录 1 相关概念介绍1 1 阻塞与非阻塞1 2 两者区别1 3 select模型 2 编码实现2 1 代码改进2 2 实现服务端客户端 3 运行结果 在 上一篇 阻塞的TCP server amp client 中 xff0c 介绍了
  • cartographer 主从机rviz订阅地图出错

    cartographer 主从机rviz订阅地图出错 配置及想法 机器人以及虚拟机都是ubuntu16 43 kinetic xff0c 本意想在虚拟机端查看机器人cartographer的建图情况 直接在虚拟机端运行命令 rviz d t
  • TCP的连接和建立(三次握手和四次挥手)

    1 TCP连接的建立 连接的建立 xff0c 通常称为三次握手 建立连接前服务器处在收听状态 第一步 xff1a 客户机的TCP向服务器的TCP发送连接请求报文段 同步位 61 1 这时客户进程进入同步已发送状态 第二步 xff1a 服务器
  • 网络编程(8)自定义网络通讯协议

    C C 43 43 网络通讯真正要用起来 xff0c 不但要写一个好的网络服务器 xff0c 还要定好一套通讯协议才能真正实用 通讯协议业界目前除了用开源的如XMPP以外 xff0c 基本上都是自定义一套通讯协议 xff0c 自已负责封包
  • libtorch导致OPENCV错误:对‘cv::imread(std::string const&, int)’未定义的引用

    1 问题描述 xff1a 报错 xff1a cmakelist txt 提示 xff1a 如果你报了相同的错误 xff0c 但是没有安装libtorch的话 xff0c 可能是cmakelist中没有target link librarie
  • 串口调试助手-QT

    串口调试助手 该程序使用Qt框架 xff0c C 43 43 语言编译而成 项目文件介绍 xff1a main cpp 该文件为该程序的入口程序 mainwindow h 该文件为该程序的主要声明部分 mainwindow cpp 该文件为
  • 基于STM32的电机--电机概述

    文章目录 电机直流有刷电机步进电机伺服电机直流无刷电机舵机 电机 电机 xff1a 俗称 马达 xff0c 依据电磁感应定律实现 电能转换或传递 的一种电磁装置 包括 xff1a 电动机和发电机 电动机在电路中是用M表示 xff0c 它的主
  • 免费公测 标贝声音理解,检测声音性别和年龄

    古有听声辨位 xff0c 今有听声 识 人 说到声音 xff0c 其本质是不同频率声音的集合 xff0c 以波的形式振动 xff08 震动 xff09 传播 由于每个人的发声器官 xff08 口腔 鼻腔 声带 xff09 各不相同 xff0
  • 前后端分离Token验证流程

    1 根据header获取token request getHeader Authorization 2 判断token 是否存在 3 token 不存在 过滤器放行 存在 根据token 获取用户名 根据用户名查询用户记录 UserDeta
  • 车载毫米波雷达MIMO阵列的天线发射问题

    说明 关于MIMO Multiple Input Multiple Output xff0c 多发多收 就不做过多介绍了 xff0c MIMO技术用于车载毫米波雷达主要的目的是增加虚拟通道 xff0c 以期使用较少的收发天线数量来达到较大的
  • 毫米波雷达的硬件架构与射频前端

    说明 本篇博文梳理 车载 毫米波雷达的系统构成 xff0c 特别地 xff0c 对其射频前端各部件做细节性的原理说明 本篇博文会基于对这方面知识理解的加深以及读者的反馈长期更新内容和所附资料 xff0c 有不当之处或有其它有益的参考资料可以
  • 串口+DMA 数据收发编程实践

    更多交流欢迎关注作者抖音号 xff1a 81849645041 目标 了解DMA 的工作原理 xff0c 通过配置 STM32F407 芯片的DMA xff0c 实现串口 43 DMA数据收发 原理 基于USART的数据通讯中采用中断方式可
  • W25Q128读写实验

    更多交流欢迎关注作者抖音号 xff1a 81849645041 目的 熟悉W25Q128串行FLASH的特性和操作指令 掌握通过SPI通讯读写W25Q128数据 原理 本章是结合SPI通讯对串行FLASH的读写 xff0c 通过SPI发送指
  • TFTLCD屏幕实验

    更多交流欢迎关注作者抖音号 xff1a 81849645041 目的 了解TFTLCD屏幕和FSMC的驱动原理 xff0c 通过STM32F4的FSMC接口来控制TFTLCD的显示 原理 1 液晶显示器 显示器属于计算机的I O设备 xff
  • STM32F4主板硬件设计与接口

    更多交流欢迎关注作者抖音号 xff1a 81849645041 本专栏的所有程序都在飞航科技 STM32 F407 开发板上测试通过 xff0c 本文介绍一下STM32 F407 开发板硬件设计与接口 xff0c 便于读者学习交流 STM3
  • 基于STM32F0实现人体红外传感器

    目的 了解人体红外传感器 HC SR501 的驱动原理和STM32F030的中断机制 xff0c 通过配置 STM32F030 芯片 GPIO 相关寄存器和外部触发中断实现人体红外传感器检测人体 原理 中断是指当CPU执行程序时 xff0c
  • STM32F0底板硬件架构设计与原理

    STM32F0底板接口明细 xff1a STM32F0底板作为整块节点的核心 xff08 如下图所示 xff09 xff0c 因此其接口相对应来说较多 xff0c 具体的接口有 xff1a 1 xff1a 5V电源输入口 xff0c STM
  • 基于STM32F030驱动SHT10温湿度传感器

    目的 了解温湿度传感器SHT10的驱动原理 xff0c 通过配置 STM32F030 的GPIO来采集温湿度传感器的温度 湿度和露点的 值 原理 SHT1x 包括 SHT10 SHT11 和 SHT15 属于Sensirion温湿度传感器家
  • Mysql整体介绍(适用于5.X版本)(下)(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 Mysql整体介绍 xff08 适用于5 X版本 xff09 下 xff09 xff0

随机推荐

  • 基于STM32F030实现RFID射频识别

    目的 了解MFRC522读写卡芯片和S50非接触IC卡的驱动原理 xff0c 通过配置 STM32F030 的GPIO和外设SPI xff0c 完成MFRC522传感器与卡的数据读写以及扣款充值实验 原理 MFRC522是高度集成的非接触式
  • MCS-51单片机学习之路(1)

    简介 单片机即单片机微型单片机 xff0c 是将单片机主机 CPU 内存和I O接口 集成在一小块硅片上的微型机 单片机又称微控制器 MCU 单片机具有三高优势 集成度高 可靠性高 性价比高 单片机的历史 第一阶段 xff0c 初级单片 机
  • 【Linux C语言查看SD卡大小】

    1 说明 在linux 环境下 xff0c 使用C预言获取SD卡容量信息 2 环境说明 硬件环境 xff1a ARM或者其他任意开发板 软件环境 xff1a Linux 任意版本 3 原理 statfs 函数 xff0c 可以获取磁盘的容量
  • shell 脚本实现的 deamon 守护进程

    1 说明 在linux 环境下 xff0c 使用 shell 脚本编写一个守护进程 xff0c 在后台一直运行 xff0c 监听需要守护的进程名称 xff0c 如app xff08 1 xff09 当检测到app进程停止 xff0c 则将其
  • mips uclibc 交叉编译ffmpeg,支持 G711A 编解码

    1 说明 使用 ffmpeg 源码 xff0c 进行交叉编译 xff0c 支持 H264 和 G711A 编码支持 2 环境说明 硬件环境 xff1a mips 架构芯片 软件环境 xff1a Linux 任意版本 3 原理 xff08 1
  • Linux下USB CDC ACM 驱动简析

    一 硬件平台 xff1a TI AM335X 芯片 二 软件平台 xff1a Ubuntu 10 04 三 USB CDC ACM 驱动简介 USB的CDC类是USB通信设备类 xff08 Communication Device Clas
  • Openwrt增加对 sd card 支持

    一 硬件平台 1 1 控制器 xff1a MT7620 xff08 A9内核 xff09 二 软件平台 2 1 开发环境 xff1a Ubuntu12 04 2 2 软件版本 xff1a openwrt 官方15 05版本SDK开发包 xf
  • linux sed命令删除特殊字符(含斜线、冒号等转义字符)

    简介 sed 是一种在线编辑器 xff0c 它一次处理一行内容 处理时 xff0c 把当前处理的行存储在临时缓冲区中 xff0c 称为 模式空间 xff08 pattern space xff09 接着用sed命令处理缓冲区中的内容 xff
  • makefile 中指定程序运行时加载的库文件路径

    1 问题描述 程序运行时 xff0c 提示找不到库 原因 xff1a 默认运行加载的库路径为 usr lib 2 解决方法 2 1 方法一 xff0c 设置PATH环境变量 如何在加入这些路径呢 xff1f 以PATH变量为例 一种方法是
  • Openwrt 新增平台编译

    1 说明 本文主要介绍 xff0c 如何在openwrt系统中 xff0c 新增一个平台进行编译 如原本的openwrt 包含了adm5120 arc770 ath25 imx6等平台 xff0c 现在需要新增一个sc9820平台的编译 本
  • Docker概述(一)(标贝科技)

    Docker概述 xff08 一 xff09 顺便介绍下 xff1a 我们是一家致力于智能语音交互的AI公司 xff0c 我们提供了语音识别 语音合成 声纹识别 声音复刻 声音转换等技术产品供小伙伴们测试调用 xff0c 感兴趣的 xff0
  • 树莓派网络配置

    1 说明 1 树莓派有线网络配置 1 树莓派系统WIFI 静态IP设置 2 树莓派系统DNS地址 etc resolv conf 开机后被还原为空或者192 168 1 1处理方法 2 环境 软件环境 xff1a 树莓派3 0 系统 硬件环
  • Linux 读写memory操作,devmem直接访问物理内存地址

    1 说明 由于开发需要 xff0c 需要通过memory传输数据 xff0c 所以使用devmem 方式读写数据 xff0c 操作linux 内存数据 devmem的方式是提供给驱动开发人员 xff0c 在应用层能够侦测内存地址中的数据变化
  • Open3D+vs配置以及使用教程

    Open3d 0 8 0 43 Cmake 43 vs2015 1 下载 简要看一下官网 xff1a Open3D Home Page Github主页 xff1a Open3D Github 注意下载版本 xff0c 一定要与vs相匹配
  • 彻底明白ip地址,区分localhost、127.0.0.1和0.0.0.0

    通俗的了解IP地址是什么 对于IP地址 xff0c 大家并不陌生 xff0c 特别是在网络访问中我们会经常使用到 xff08 平时对域名如百度的www baidu com的访问 xff0c 本质就是对域名所绑定的IP地址的访问 xff09
  • C3927 “->“: 非函数声明符后不允许尾随返回类型等错误

    C3927 34 gt 34 非函数声明符后不允许尾随返回类型等错误 xff0c 如下所示 xff1a 解决方法 xff1a 在VS2015版本 Visual Studio 2015 Update 2 xff0c 增加一个编译选项 utf
  • c++ nan或inf

    nan xff1a not a number 非数字 注意事项 xff1a 对负数开方sqrt 1 0 对负数求对数 log 1 0 0 0 0 0 0 0 inf inf inf inf inf这些操作都会得到nan 0 0会产生操作异常
  • 膨胀、腐蚀、开、闭运算——数字图像处理中的形态学

    膨胀 腐蚀 开 闭运算是数学形态学最基本的变换 形态学通常用于二值图像 一 膨胀与腐蚀能够实现以下作用 xff1a 1 消除噪声 2 分割出独立的图像元素 xff0c 在图像中连接相邻的元素 3 寻找图像中的明显的极大值区域或者极小值区域
  • c语言中&与&&区别

    c语言中 amp 与 amp amp 的区别 amp xff1a 按照位与操作 xff0c 例如 xff1a 0010 amp 1101 xff0c 结果为0000 amp 是java中的位逻辑运算 xff1a eg xff1a 2 amp
  • 网格搜索法

    网格搜索法是指定参数值的一种穷举搜索方法 xff0c 通过将估计函数的参数通过交叉验证的方法进行优化来得到最优的学习算法 即 xff0c 将各个参数可能的取值进行排列组合 xff0c 列出所有可能的组合结果生成 网格 然后将各组合用于SVM