目录

  • 前言
  • 一、含义&优缺点&简单实现
    • 1-1、网格搜索简单实现
    • 1-2、带有交叉验证的网格搜索
  • 二、GridSearchCV(网格搜索&交叉验证)
    • 2-1、GridSearchCV简介
    • 2-2、GridSearchCV方法
    • 2-3、GridSearchCV实战
  • 总结

前言

网格搜索是调参侠常用的一种调参手段

一、含义&优缺点&简单实现

含义:手动的给出一个模型中想要改动的所有参数,让程序帮助我们使用穷举法把所有参数组合运行一遍,选出最好的参数组合。一般和交叉验证搭配使用,因为使用交叉验证可以使得评分更加严谨。
优点:并行计算,速度很快
缺点:当参数量很多时,非常耗费计算资源。

1-1、网格搜索简单实现

代码介绍:使用鸢尾花数据集,嵌套两层for循环来遍历两个参数列表,在训练集上训练之后,用模型在测试集上找到最好的分数并且输出对应参数以及分数。

from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_splitiris = load_iris()
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=0)
print("Size of training set:{} size of testing set:{}".format(X_train.shape[0],X_test.shape[0]))####   grid search start
best_score = 0
for gamma in [0.001,0.01,0.1,1,10,100]:for C in [0.001,0.01,0.1,1,10,100]:svm = SVC(gamma=gamma,C=C)#对于每种参数可能的组合,进行一次训练;svm.fit(X_train,y_train)score = svm.score(X_test,y_test)if score > best_score:#找到表现最好的参数best_score = scorebest_parameters = {'gamma':gamma,'C':C}
####   grid search endprint("Best score:{:.2f}".format(best_score))
print("Best parameters:{}".format(best_parameters))

输出
Size of training set:112 size of testing set:38
Best score:0.97
Best parameters:{‘gamma’: 0.001, ‘C’: 100}

1-2、带有交叉验证的网格搜索

代码介绍:同样的使用鸢尾花数据集,使用两层for循环来赋值参数,不同的是每一层循环内使用对应的参数来做训练,并且使用交叉验证函数cross_val_score来得到一个训练的平均分数,循环结束,得到最好的参数,重新在训练集上训练,并且在测试集上得到分数。

from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_scoreiris = load_iris()
X_trainval,X_test,y_trainval,y_test = train_test_split(iris.data,iris.target,random_state=0)
best_score = 0.0
for gamma in [0.001,0.01,0.1,1,10,100]:for C in [0.001,0.01,0.1,1,10,100]:svm = SVC(gamma=gamma,C=C)scores = cross_val_score(svm,X_trainval,y_trainval,cv=5) #5折交叉验证score = scores.mean() #取平均数if score > best_score:best_score = scorebest_parameters = {"gamma":gamma,"C":C}
svm = SVC(**best_parameters)
svm.fit(X_trainval,y_trainval)
test_score = svm.score(X_test,y_test)
print("Best score on validation set:{:.2f}".format(best_score))
print("Best parameters:{}".format(best_parameters))
print("Score on testing set:{:.2f}".format(test_score))

输出
Best score on validation set:0.97
Best parameters:{‘gamma’: 0.1, ‘C’: 10}
Score on testing set:0.97

二、GridSearchCV(网格搜索&交叉验证)

2-1、GridSearchCV简介

含义:(sklearn类的一个方法)GridSearchCV既包含了网格搜索,又包含了交叉验证。只要输入参数列表,就可以保证在指定的参数范围内找到精度最高的参数,适合小型数据集,但是缺点是要遍历所有可能的参数组合的话,在面对大数据集和多参数的情况下,将会非常耗时。
补充:当数据量较大时,可以选择使用坐标下降法,即拿对模型影响较大的参数依次调优。
网格搜索:使用不同的参数组合来找到在验证集上精度最高的参数。
k折交叉验证:k折交叉验证将所有数据集分成k份,不重复地每次取其中一份做测试集,用其余k-1份做训练集训练模型,之后计算该模型在测试集上的得分,将k次的得分取平均得到最后的得分。

2-2、GridSearchCV方法

GridSearchCV参数说明

sklearn.model_selection.GridSearchCV(# 选择使用的分类器 estimator, # 需要最优化的参数的取值,值为字典或者列表。param_grid, *, # 模型评价标准。scoring=None, # 使用处理器的个数,默认为1,当为-1时,表示使用所有处理器。n_jobs=None, # 默认为True,为True时,默认为各个样本fold概率分布一致。iid='deprecated', # 默认为True,即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。refit=True, # 交叉验证参数,默认为5,即使用五折交叉验证。cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False
)

GridSearchCV属性以及方法说明

  • cv_results_ : dict of numpy (masked) ndarrays具有键作为列标题和值作为列的dict,可以导入到DataFrame中。注意,“params”键用于存储所有参数候选项的参数设置列表。
  • best_estimator_ : 最优模型以及对应的参数,如果refit = False,则不可用。
  • best_score_ :观察到的最好的评分。
  • best_parmas_ : 给出最佳结果的参数设置
  • best_index_ : int 对应于最佳候选参数设置的索引(cv_results_数组)search.cv_results _ [‘params’] [search.best_index_]中的dict给出了最佳模型的参数设置,给出了最高的平均分数(search.best_score_)
  • grid.fit(): 运行网格搜索
  • predict: 使用找到的最佳参数在估计器上调用预测
  • grid.score(): 模型在测试集上表现最好的分数。

2-3、GridSearchCV实战

from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score#把要调整的参数以及其候选值 列出来;
param_grid = {"gamma":[0.001,0.01,0.1,1,10,100],"C":[0.001,0.01,0.1,1,10,100]}
print("Parameters:{}".format(param_grid))grid_search = GridSearchCV(SVC(),param_grid,cv=5) #实例化一个GridSearchCV类
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=10)
grid_search.fit(X_train,y_train) #训练,找到最优的参数,同时使用最优的参数实例化一个新的SVC estimator。
print("Test set score:{:.2f}".format(grid_search.score(X_test,y_test)))
print("Best parameters:{}".format(grid_search.best_params_))
print("Best score on train set:{:.2f}".format(grid_search.best_score_))

输出
Parameters:{‘gamma’: [0.001, 0.01, 0.1, 1, 10, 100], ‘C’: [0.001, 0.01, 0.1, 1, 10, 100]}
Test set score:0.97
Best parameters:{‘C’: 10, ‘gamma’: 0.1}
Best score on train set:0.98

参考文章:
sklearn中的GridSearchCV方法详解.
机器学习(四)——模型调参利器 gridSearchCV(网格搜索).
Python机器学习笔记:Grid SearchCV(网格搜索).
sklearn官网.


总结

今天是周日! 斗破更新了,休息的时候我要马上去看!

网格搜索的原理以及实战以及相关API(GridSearchCV)相关推荐

  1. Lesson 6.5Lesson 6.6.1Lesson 6.6.2 机器学习调参基础理论与网格搜索多分类评估指标的macro与weighted过程GridSearchCV的进阶使用方法

    Lesson 6.5 机器学习调参基础理论与网格搜索 在上一小节执行完手动调参之后,接下来我们重点讨论关于机器学习调参的理论基础,并且介绍sklearn中调参的核心工具--GridSearchCV. ...

  2. c语言网格搜索算法例题,模型参数选择方法——GridSearch网格搜索

    在日常模型训练过程中,模型有多种选择,模型的参数同样也有多种选择,如何根据同一批数据选出最适合的模型和参数呢? 一般情况下,模型还比较好选择,是选用机器学习中分类模型例如 LR.SVM或XGBoost ...

  3. sklearn网格搜索

    """网格搜索 通过不同参数组合尝试训练网络获得最优参数.最优模型 """ import numpy as np import sklear ...

  4. 数据挖掘原理与算法:机器学习->{[sklearn. model_selection. train_test_split]、[h2o]、[网格搜索]、[numpy]、[plotly.express]}

    数据挖掘原理与算法:机器学习->{[sklearn. model_selection. train_test_split].[h2o].[网格搜索].[numpy].[plotly.expres ...

  5. 加载svr模型_机器学习XGBoost实战,网格搜索自动调参,对比随机森林,线性回归,SVR【完整代码(含注释)+数据集见原文链接】...

    建议:阅读2020.8.7的文章,完全了解GDBT和XGBT的原理. 机器学习- XGBoost,GDBT[过程:决策树,集成学习,随机森林,GDBT,XGBT,LightGBM] 本次实践内容: 数 ...

  6. Sklearn专题实战——数据处理+模型构建+网格搜索+保存(提取)模型

    文章目录 1.前言 2.数据处理 3.模型构建 3.1.支持向量机 3.2.决策树 3.3.逻辑回归 4.网格搜索寻找最优结果 5.保存模型+提取模型 1.前言 针对Sklearn在前面已经通过代码实 ...

  7. Python实现直方图梯度提升分类模型(HistGradientBoostingClassifier算法)并基于网格搜索进行优化同时绘制PDP依赖图项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 基于直方图的梯度提升分类树.此估算器对缺失值 (NaN) 具有原 ...

  8. ​360搜索下拉词框跟相关搜索算法原理是什么?如何做360下拉推广?​

    一.360相关搜索跟下拉词算法分析 首先我们来分析一下360下拉词产生的算法是怎么样的? 通常来说,一个下拉词的产生跟这个词语的热度是相关的,简单的说就是一个词语的关注度(资讯.搜索等等)热度越高,那 ...

  9. 机器学习代码实战——网格搜索和交叉验证(GridSearchCV)

    文章目录 1.实验目的 2.导入必要模块并读取数据 3.构建模型-参数字典 4.训练 5.打印不同模型.不同参数对应的结果 1.实验目的 (1)运用GridSearchCV比较不同的模型.不同的参数对 ...

  10. python机器学习相关的操作 numpy,GridSearchCV(网格搜索)等

    numpy切片操作 视频讲解 numpy 简单入门 GridSearchCV的简单使用视频讲解 SVM参数优化 metrics中的precision_score,recall_score,accura ...

最新文章

  1. 乐山师范计算机科学与技术怎么样,乐山师范学院计算机科学与技术(本科)教育概况...
  2. 数据结构源码笔记(C语言描述)汇总
  3. 开发高性能JAVA应用程序基础(内存篇)
  4. CVPR 2021 | Facebook提出FP-NAS:搜索速度更快、分类精度更高、性能更好
  5. 进程调度算法 C++实现
  6. java 中io的删除文件_总结删除文件或文件夹的7种方法-JAVA IO基础总结第4篇
  7. SQL Server 自动更新统计信息的基本算法
  8. sql2012 ssrs_您必须在SQL Server Reporting Services(SSRS)中记录的十件事
  9. 如何利用jq来实现复选框的全选,反选!
  10. java.lang.IllegalStateException: Unable to read meta-data for class 问题的解决
  11. 修改mysql 表的字符编码
  12. extremecomponents-1.0.1.jar 的使用小例子
  13. 电子设计大赛-室内可见光定位装置
  14. 系统的用户分析方法及分析内容
  15. ISO27017云服务信息安全管理体系认证
  16. 东方财富股票接口解析优缺点
  17. python------列表的使用
  18. 记账想要简单又安全,使用电脑记账是最佳的选择
  19. MP4测试视频URL地址分享,亲测有效。可用于测试HTML5播放器效果。
  20. 移动应用开发期末总结

热门文章

  1. Datalogic 得利捷最新推出Matrix 320 5MP:不仅限于内部物流追溯
  2. PN512使用的一些小技巧
  3. 音创点歌机_音创ktv点歌系统家庭版-音创KTV点歌系统下载 v3.17--pc6下载站
  4. windows对应字体
  5. dosbox详细安装级及使用
  6. 深入理解JVM虚拟机之高效并发
  7. 【1】Python 视频文字识别提取 - Mp4转换成Mp3
  8. 150.1 go语言开发实战慕课版
  9. stata怎么画分类图_Stata怎么画直方图或折线图-Stata教程
  10. 《大数据技术原理与应用》 期末复习