[Python] 什么是网格搜索以及scikit-learn中GridSearch类的介绍和使用案例?

什么是网格搜索?

**网格搜索是一种参数调优的方法,它可以帮助找到最佳的模型参数。**在网格搜索中,我们先指定参数的候选值范围,然后枚举所有可能的参数组合,计算每个模型的性能指标(比如准确率、精确率等)。最后,选择性能指标最优的那个参数组合作为最终的模型参数。网格搜索的名称来源于我们将参数的候选值范围表示为一个二维的参数网格。

scikit-learn GridSearchCV类介绍

API Reference --- scikit-learn 1.4.0 documentation

sklearn.model_selection.GridSearchCV --- scikit-learn 1.4.0 documentation

重要参数说明:

  • estimator:要优化的模型对象。
  • param_grid:指定参数的候选值范围,可以是一个字典或列表。
  • scoring:性能评估方法。
  • n_jobs:并行运行的作业数。
  • refit:是否在找到最佳参数后在整个数据集上重新拟合估计器。
  • cv:交叉验证生成器或可迭代的产生训练/验证集的拆分器。
  • verbose:详细程度。
  • pre_dispatch:控制在并行执行期间调度的作业数。当调度的作业比CPU处理的作业多时,减少这个数字有助于避免内存消耗的爆炸式增长。
  • error_score:如果估算器拟合中出现错误,则分配给分数的值。。
  • return_train_score:是否返回训练评分。

重要属性说明:

  • best_estimator_:返回在交叉验证中选择的最佳估计器。
  • best_params_:返回在交叉验证中选择的最佳参数组合。
  • best_score_:返回在交叉验证中选择的最佳评分。
  • cv_results_:返回一个字典,其中包含网格搜索期间计算出的所有性能指标和参数设置的详细信息。
  • scorer_:返回用于评分的评估器。
  • n_splits_:返回交叉验证折叠数。

这些属性可以提供有关在网格搜索期间发生的事件和结果的详细信息,包括最佳模型、最佳参数和最佳评分等。您可以根据需要使用这些属性来进一步分析优化的结果。

scikit-learn GridSearchCV类使用案例

复制代码
# 导入依赖包
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 导入乳腺癌数据集,探索数据
data = load_breast_cancer()
print(data.data.shape) # 可以看到,乳腺癌数据集有569条记录,30个特征,单看维度虽然不算太高,但是样本量非常少。过拟合的情况可能存在。
print(data.data[0:5])
print(data.target.shape)
print(data.target[0:5])
print(data.feature_names)
print(data.target_names)
复制代码
# 进行一次简单的建模,看看模型本身在数据集上的效果
rfc = RandomForestClassifier(n_estimators=10, random_state=90)
score_pre = cross_val_score(rfc, data.data, data.target,cv=10).mean()
score_pre
# 这里可以看到,随机森林在乳腺癌数据上的表现本就还不错,在现实数据集上,基本上不可能什么都不调就看到95%以上的准确率
复制代码
# 开始按照参数对模型整体准确率的影响程度进行调参,首先调整max_depth
#调整max_depth
param_grid = {'max_depth':np.arange(1, 20, 1)}
# 一般根据数据的大小来进行一个试探,乳腺癌数据很小,所以可以采用1~10,或者1~20这样的试探
# 但对于像digit recognition那样的大型数据来说,我们应该尝试30~50层深度(或许还不足够
#   更应该画出学习曲线,来观察深度对模型的影响
rfc = RandomForestClassifier(n_estimators=73
                             ,random_state=90
                           )
GS = GridSearchCV(rfc, param_grid, cv=10)
GS.fit(data.data,data.target)
print(GS.best_params_)
print(GS.best_score_)
plt.figure(figsize=[20,5])
plt.plot(range(1,20), GS.cv_results_['mean_test_score'])
plt.ylabel('score')
plt.xlabel('max_depth')
plt.xticks(range(1,21))
plt.show()

更多详细信息,可以阅读:[Python] 什么是集成算法,什么是随机森林?随机森林分类器(RandomForestClassifier)及其使用案例-CSDN博客

的"案例二:乳腺癌数据集进行随机森林调参"。

相关推荐
橘子编程1 分钟前
GoF 23 种设计模式完整知识总结与使用教程
java·c语言·开发语言·python·设计模式
枫叶林FYL4 分钟前
【Python高级工程与架构实战】项目五:生产级LLM Agent框架:基于PydanticAI的类型安全企业级实现
python·安全·架构
ths5124 分钟前
Python 正则表达式学习笔记(小白超详细版)(一)
python·正则表达式
飞Link9 分钟前
pprint 全量技术手册:复杂数据结构的结构化输出引擎
开发语言·前端·python
培风图南以星河揽胜14 分钟前
幻想简历!博主本人期望的 AI Agent 全栈简历:Java + Python + Vue3 跨语言实战,代码已开源!
java·人工智能·python
第一程序员15 分钟前
Python函数式编程:非科班转码者的入门指南
python·github
蓝色的杯子16 分钟前
龙虾-OpenClaw一文详细了解-手搓OpenClaw-2 Provider层
人工智能·python
AI_Claude_code25 分钟前
ZLibrary访问困境方案二:DNS-over-HTTPS/TLS配置与隐私保护实践
爬虫·python·网络协议·http·网络安全·https·网络爬虫
至此流年莫相忘29 分钟前
数据库迁移工具——Alembic
python
Dxy123931021634 分钟前
Python有哪些方法可以进行文本纠错
开发语言·python