[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博客

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

相关推荐
南部余额23 分钟前
Python OOP核心技巧:如何正确选择实例方法、类方法和静态方法
开发语言·python
2303_Alpha42 分钟前
深度学习入门:深度学习(完结)
人工智能·笔记·python·深度学习·神经网络·机器学习
深度学习入门1 小时前
机器学习,深度学习,神经网络,深度神经网络之间有何区别?
人工智能·python·深度学习·神经网络·机器学习·机器学习入门·深度学习算法
森哥的歌2 小时前
Python uv包管理器使用指南:从入门到精通
python·开发工具·uv·虚拟环境·包管理
qq_214782612 小时前
给你的matplotlib images添加scale Bar
python·数据分析·matplotlib
Johny_Zhao2 小时前
Vmware workstation安装部署微软SCCM服务系统
网络·人工智能·python·sql·网络安全·信息安全·微软·云计算·shell·系统运维·sccm
waterHBO2 小时前
python + flask 做一个图床
python
ZWaruler3 小时前
二: 字典及函数的使用
python
蚰蜒螟4 小时前
深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
开发语言·jvm·python
墨绿色的摆渡人4 小时前
pytorch小记(二十):深入解析 PyTorch 的 `torch.randn_like`:原理、参数与实战示例
人工智能·pytorch·python