首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
4.1 分类变量
4.1.1 One-Hot 编码(虚拟变量)
4.1.2 数字可以编码分类变量
4.2 分箱、离散化、线性模型与树
4.3 交互特征与多项式特征
4.4 单变量非线性变换
4.5 自动化特征选择
4.5.1 单变量统计
4.5.2 基于模型的特征选择
4.5.3 迭代特征选择
4.6 利用专家知识
5.1 交叉验证
5.1.1 scikit-learn 中的交叉验证
5.1.2 交叉验证的优点
5.1.3 分层k 折交叉验证和其他策略
5.2 网格搜索
5.2.1 简单网格搜索
5.2.2 参数过拟合的风险与验证集
5.2.3 带交叉验证的网格搜索
5.3 评估指标与评分
5.3.1 牢记目标
5.3.2 二分类指标
5.3.3 多分类指标
5.3.4 回归指标
5.3.5 在模型选择中使用评估指标
6.1 用预处理进行参数选择
6.2 构建管道
6.3 在网格搜索中使用管道
6.4 通用的管道接口
6.4.1 用make_pipeline 方便地创建管道
6.4.2 访问步骤属性
6.4.3 访问网格搜索管道中的属性
6.5 网格搜索预处理步骤与模型参数
6.6 网格搜索选择使用哪个模型
7.1 用字符串表示的数据类型
7.2 示例应用:电影评论的情感分析
7.3 将文本数据表示为词袋
7.3.1 将词袋应用于玩具数据集
7.3.2 将词袋应用于电影评论
7.4 停用词
7.5 用tf-idf 缩放数据
7.6 研究模型系数
7.7 多个单词的词袋(n元分词)
7.8 分词、词干提取与词形还原
7.9 主题建模与文档聚类
8.1 处理机器学习问题
8.2 从原型到生产
8.3 测试生产系统
8.4 构建你自己的估计器
8.5 下一步怎么走
8.5.1 理论
8.5.2 其他机器学习框架和包
8.5.3 排序、推荐系统与其他学习类型
8.5.4 概率建模、推断与概率编程
8.5.5 神经网络
8.5.6 推广到更大的数据集
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(下)
小册名称:Python机器学习基础教程(下)
### 5.2 网格搜索 在机器学习项目中,模型的选择与优化是一个至关重要的环节。不同的算法、不同的参数配置都会对模型的性能产生显著影响。为了找到最优的模型配置,我们通常需要尝试多种参数组合,并评估每种组合下的模型性能。这一过程既耗时又繁琐,但幸运的是,我们可以借助一些自动化工具来简化这一过程,其中之一就是**网格搜索(Grid Search)**。 #### 5.2.1 网格搜索概述 网格搜索是一种通过穷举法来搜索最优参数的技术。它定义了一个参数的“网格”,即每个参数可能取值的集合,然后遍历这个网格中的所有参数组合,对每种组合训练模型,并使用交叉验证来评估其性能。最终,网格搜索会选择出平均性能最好的参数组合作为最终结果。 网格搜索的优点在于其简单性和可重复性。通过明确指定参数的搜索范围和步长,我们可以确保所有可能的组合都被考虑到,从而避免遗漏可能的最优解。然而,网格搜索的缺点也很明显:当参数空间很大时,计算成本会急剧增加,导致搜索过程变得非常耗时。 #### 5.2.2 使用Scikit-learn进行网格搜索 在Python的机器学习库中,`scikit-learn`提供了强大的网格搜索功能,通过`GridSearchCV`类实现。`GridSearchCV`结合了网格搜索和交叉验证的优势,能够自动地遍历所有指定的参数组合,并使用交叉验证来评估每种组合的性能。 ##### 5.2.2.1 导入必要的库 首先,我们需要导入`scikit-learn`中的相关模块: ```python from sklearn.model_selection import GridSearchCV from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score ``` ##### 5.2.2.2 准备数据和模型 接下来,我们加载一个数据集(以Iris数据集为例)并初始化一个模型(以随机森林分类器为例): ```python # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 初始化模型 model = RandomForestClassifier() ``` ##### 5.2.2.3 定义参数网格 然后,我们定义一个参数网格,指定我们想要搜索的参数及其取值范围: ```python param_grid = { 'n_estimators': [10, 50, 100, 200], # 树的数量 'max_depth': [None, 10, 20, 30], # 树的最大深度 'min_samples_split': [2, 5, 10], # 划分内部节点所需的最小样本数 'min_samples_leaf': [1, 2, 4] # 叶子节点必须具有的最小样本数 } ``` ##### 5.2.2.4 执行网格搜索 现在,我们使用`GridSearchCV`来执行网格搜索。我们还需要指定交叉验证的折数(folds),以及用于评估性能的评分标准(如准确率): ```python grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy') grid_search.fit(X, y) ``` ##### 5.2.2.5 查看结果 搜索完成后,我们可以查看最佳参数组合以及对应的性能指标: ```python print("最佳参数组合:", grid_search.best_params_) print("最佳模型在训练集上的准确率:", grid_search.best_score_) # 使用最佳参数构建模型,并在测试集上评估(如果有的话) best_model = grid_search.best_estimator_ # 假设我们有一个测试集X_test和y_test # predictions = best_model.predict(X_test) # print("测试集上的准确率:", accuracy_score(y_test, predictions)) ``` #### 5.2.3 网格搜索的改进与优化 尽管网格搜索是一种强大的工具,但在实际应用中,我们可能需要考虑一些策略来改进其效率: 1. **缩小搜索空间**:通过先验知识或初步实验,我们可以缩小参数的搜索范围,从而减少计算成本。 2. **使用随机搜索**:当参数空间非常大时,可以考虑使用随机搜索(如`RandomizedSearchCV`)作为替代方案。随机搜索不是穷举所有组合,而是随机选择一部分组合进行评估,这可以在保持一定探索性的同时减少计算量。 3. **并行计算**:利用`GridSearchCV`的`n_jobs`参数,我们可以指定并行运行的作业数,以加速搜索过程。注意,这要求你的系统有足够的计算资源来支持并行计算。 4. **分阶段搜索**:对于具有多个参数的模型,可以先固定一些参数,对剩余的参数进行网格搜索,找到一组较好的参数后,再固定这些参数,对其他参数进行搜索。这样可以分阶段地逼近最优解。 5. **使用贝叶斯优化**:贝叶斯优化是一种基于概率模型的方法,它利用先前的搜索结果来指导后续的搜索方向,通常比网格搜索和随机搜索更加高效。 #### 5.2.4 结论 网格搜索是机器学习模型参数调优中的一种基本而强大的方法。通过自动遍历所有可能的参数组合,并结合交叉验证来评估每种组合的性能,网格搜索能够帮助我们找到最优的模型配置。然而,我们也需要注意到网格搜索的局限性,并在必要时采取改进措施来优化搜索过程。通过合理应用网格搜索及其优化策略,我们可以更有效地提升机器学习模型的性能。
上一篇:
5.1.3 分层k 折交叉验证和其他策略
下一篇:
5.2.1 简单网格搜索
该分类下的相关小册推荐:
Python与办公-玩转Excel
Python高并发编程与实战
Python数据分析与挖掘实战(下)
剑指Python(万变不离其宗)
Python机器学习基础教程(上)
Python合辑2-字符串常用方法
Python编程轻松进阶(三)
剑指Python(磨刀不误砍柴工)
Python合辑11-闭包函数
Python合辑4-130个字符串操作示例
Python合辑12-面向对象
Python编程轻松进阶(二)