网格搜索的原理以及实战以及相关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 开发者
实战阿里qwen2.5-coder 32B,如何配置Cline的Ollama API接口。
阿里Qwen2.5大模型开源免费,适合编程应用。在Ollama平台下载时,推荐选择带有“cline”字样的Qwen2.5-Coder版本,仅需额外下载适配文件,无需重复下载模型文件。Ollama环境永久免费,配置简单,效果出色,适合开发者使用。
3040 77
|
2天前
|
机器学习/深度学习 人工智能 Serverless
|
1月前
|
供应链 搜索推荐 API
深度解析1688 API对电商的影响与实战应用
在全球电子商务迅猛发展的背景下,1688作为知名的B2B电商平台,为中小企业提供商品批发、分销、供应链管理等一站式服务,并通过开放的API接口,为开发者和电商企业提供数据资源和功能支持。本文将深入解析1688 API的功能(如商品搜索、详情、订单管理等)、应用场景(如商品展示、搜索优化、交易管理和用户行为分析)、收益分析(如流量增长、销售提升、库存优化和成本降低)及实际案例,帮助电商从业者提升运营效率和商业收益。
181 20
|
1月前
|
缓存 API 开发者
京东按图搜索商品(拍立淘)API接口系列(京东API)
京东按图搜索商品(拍立淘)API 接口(.jd.item_search_img)通过上传图片搜索京东平台上的相似商品,基于图像识别技术提供便捷的商品搜索方式。适用于电商平台展示、比价等场景。响应参数包括公共参数、商品信息及搜索结果相关参数,方便分页展示和了解整体搜索规模。Python 请求示例展示了如何使用该接口进行图片搜索。
84 15
|
30天前
|
XML API 开发者
探究获取亚马逊畅销榜API接口及实战应用
亚马逊MWS(商城网络服务)提供了一系列API接口,帮助开发者获取平台数据,其中畅销榜API尤为关键。通过注册开发者账号、创建应用并申请权限,可使用HTTP POST请求获取商品的销售排名、价格等信息。Python代码示例展示了如何构建和发送请求,并处理返回的XML或JSON数据。注意遵守亚马逊的频率限制、数据准确性和合规性要求,以确保安全合法地利用这些数据支持电商业务决策。
63 1
|
1月前
|
JSON 监控 API
获取1688商品SKU信息API接口及实战应用
在电商蓬勃发展的今天,数据成为宝贵的财富。1688作为国内知名批发采购平台,提供商品SKU信息API接口,可获取库存、价格、规格等关键数据,助力电商运营、市场分析和价格监控。本文介绍如何注册1688开放平台账号、创建应用并获取AppKey/AppSecret,申请API权限,使用Python实现接口调用,处理响应数据,并注意请求频率限制和错误处理。通过该接口,可为电商运营和数据分析提供有力支持。
70 2
|
1月前
|
安全 程序员 API
API对于程序员的多元用法:从基础到实战
API(应用程序编程接口)是现代软件开发中不可或缺的工具,充当不同系统间沟通的桥梁。通过API,程序员可以轻松获取外部数据、扩展应用功能、实现微服务间的通信等,极大提升开发效率和应用功能性。常见的API类型包括Web API、本地API和第三方API。使用API,开发者能快速集成复杂功能(如支付、物流跟踪),并确保数据安全与管理。掌握API的开发、维护及安全管理技巧,对构建高效、稳定的应用至关重要。随着数字化进程加速,API的重要性将不断提升。
40 1
|
1月前
|
JSON 数据挖掘 API
唯品会按关键字搜索 VIP 商品 API 接口的开发应用与收益
在电商蓬勃发展的今天,精准的商品搜索功能至关重要。唯品会的按关键字搜索VIP商品API接口通过高效、精准的检索,提升了用户购物体验和商家销售业绩。该接口基于RESTful架构,采用JSON格式交互,支持唯品会APP内搜索、第三方平台合作及数据分析等场景,显著提升用户活跃度与忠诚度,拓展销售渠道,增加收入,并挖掘数据驱动的商业价值,助力唯品会持续发展。
55 4
|
2月前
|
监控 搜索推荐 API
京东按图搜索京东商品(拍立淘)API接口的开发、应用与收益
京东通过开放商品详情API接口,尤其是按图搜索(拍立淘)API,为开发者、企业和商家提供了创新空间和数据支持。该API基于图像识别技术,允许用户上传图片搜索相似商品,提升购物体验和平台竞争力。开发流程包括注册账号、获取密钥、准备图片、调用API并解析结果。应用场景涵盖电商平台优化、竞品分析、个性化推荐等,为企业带来显著收益,如增加销售额、提高利润空间和优化用户体验。未来,随着数字化转型的深入,该API的应用前景将更加广阔。
127 1
|
2月前
|
安全 API 数据安全/隐私保护
速卖通AliExpress商品详情API接口深度解析与实战应用
速卖通(AliExpress)作为全球化电商的重要平台,提供了丰富的商品资源和便捷的购物体验。为了提升用户体验和优化商品管理,速卖通开放了API接口,其中商品详情API尤为关键。本文介绍如何获取API密钥、调用商品详情API接口,并处理API响应数据,帮助开发者和商家高效利用这些工具。通过合理规划API调用策略和确保合法合规使用,开发者可以更好地获取商品信息,优化管理和营销策略。

热门文章

最新文章