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

简介: 网格搜索的原理以及实战以及相关API(GridSearchCV)

前言


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


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


含义:手动的给出一个模型中想要改动的所有参数,让程序帮助我们使用穷举法把所有参数组合运行一遍,选出最好的参数组合。一般和交叉验证搭配使用,因为使用交叉验证可以使得评分更加严谨。

优点:并行计算,速度很快

缺点:当参数量很多时,非常耗费计算资源。


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


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


from sklearn.datasets import load_iris
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
iris = 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 = score
            best_parameters = {'gamma':gamma,'C':C}
####   grid search end
print("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_score
iris = 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 = score
            best_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官网.


总结


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


相关文章
|
1月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
1月前
|
缓存 自然语言处理 API
阿里巴巴国际站关键字搜索 API 实战:3 步搞定多语言适配 + 限流破局,询盘量提升 40%
跨境电商API开发常陷合规、多语言、限流等坑。本文详解从国际合规(GDPR/CCPA)到参数优化、数据结构化及区域化搜索的全链路方案,附Python代码模板与缓存重试架构,助力提升调用成功率至99%+,精准询盘增长42%。
|
1月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
1月前
|
开发者 API 机器学习/深度学习
淘宝 / 1688 / 义乌购图搜 API 实战指南:接口调用与商业场景应用
本文详解淘宝、1688、义乌购三大平台图片搜索接口的核心特点、调用流程与实战代码。涵盖跨平台对比、参数配置、响应解析及避坑指南,支持URL/Base64上传,返回商品ID、价格、销量等关键信息,助力开发者快速实现商品识别与比价功能。
淘宝 / 1688 / 义乌购图搜 API 实战指南:接口调用与商业场景应用
|
1月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
1月前
|
存储 API 数据库
按图搜索1688商品的API接口
本文介绍如何利用阿里云ImageSearch服务实现1688商品的按图搜索功能。通过提取图像特征向量并计算相似度,结合Flask搭建API接口,可快速构建基于图片的商品检索系统,提升电商用户体验。
246 0
|
1月前
|
JSON API 开发者
1688按关键词搜索商品的API接口技术指南
本文介绍如何使用1688开放平台API实现商品关键词搜索,涵盖API概述、权限申请、调用步骤、Python代码示例及注意事项,助力开发者高效集成商品搜索功能,适用于电商自动化、价格监控等场景,内容基于官方文档,确保准确可靠。
210 0
|
1月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
2月前
|
人工智能 运维 监控
阿里云 API 聚合实战:破解接口碎片化难题,3 类场景方案让业务响应提速 60%
API聚合破解接口碎片化困局,助力开发者降本增效。通过统一中间层整合微服务、第三方接口与AI模型,实现调用次数减少60%、响应提速70%。阿里云实测:APISIX+函数计算+ARMS监控组合,支撑百万级并发,故障定位效率提升90%。
263 0
|
1月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南