首页
技术小册
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.1 简单网格搜索 在机器学习项目中,模型调优是一个至关重要的环节。不同的算法参数设置会直接影响到模型的性能,包括准确率、召回率、F1分数等关键指标。为了找到最优的参数组合,我们需要一种系统化的方法来遍历多个参数的可能值,这种方法称为超参数调优(Hyperparameter Tuning)。在众多超参数调优技术中,网格搜索(Grid Search)因其简单直观而广受欢迎,特别是在面对较小的参数空间时,其效果尤为显著。本章将深入介绍简单网格搜索的基本原理、实现步骤以及在Python中使用scikit-learn库进行网格搜索的实践。 #### 5.2.1.1 网格搜索概述 网格搜索是一种穷举搜索算法,它通过遍历所有可能的参数组合来找到最优的参数设置。具体来说,对于每个超参数,我们定义一个范围(或一系列离散值),网格搜索将所有这些参数的笛卡尔积作为候选集,然后使用交叉验证(Cross-Validation)来评估每一组参数在训练集上的表现,最终选择出平均表现最好的一组参数作为最终参数。 网格搜索的优点在于其简单性和易于实现,它能够保证找到在给定的参数空间内的最优解(或近似最优解)。然而,随着参数数量和每个参数可选值的增加,网格搜索的计算成本会急剧上升,可能导致计算资源耗尽。因此,在实际应用中,我们需要权衡参数空间的广度和搜索效率。 #### 5.2.1.2 实现网格搜索的步骤 1. **定义参数空间**:首先,根据算法的特性和你对数据的理解,为需要调整的超参数定义一个合理的范围或一组离散值。 2. **选择评估方法**:通常使用交叉验证来评估不同参数组合下的模型性能。交叉验证通过多次划分训练集和验证集,能够更准确地估计模型的泛化能力。 3. **配置网格搜索**:使用选定的参数空间和评估方法配置网格搜索算法。 4. **执行网格搜索**:启动网格搜索过程,该过程将自动遍历所有参数组合,并应用交叉验证来评估每组参数。 5. **分析结果并选择最佳参数**:网格搜索完成后,分析结果并选择出性能最优的参数组合。 6. **使用最佳参数训练最终模型**:使用选定的最佳参数在全部训练数据上重新训练模型,得到最终的机器学习模型。 #### 5.2.1.3 Python实现:使用scikit-learn的GridSearchCV 在Python中,scikit-learn库提供了`GridSearchCV`类,它封装了网格搜索的整个流程,使得超参数调优变得非常便捷。以下是一个使用`GridSearchCV`进行网格搜索的示例,我们将以决策树分类器为例。 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # 加载数据 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 定义决策树分类器 clf = DecisionTreeClassifier() # 定义参数网格 param_grid = { 'max_depth': [None, 10, 20, 30, 40, 50], 'min_samples_split': [2, 5, 10], 'min_samples_leaf': [1, 2, 4] } # 初始化GridSearchCV对象 grid_search = GridSearchCV(estimator=clf, param_grid=param_grid, cv=5, scoring='accuracy', verbose=2, n_jobs=-1) # 执行网格搜索 grid_search.fit(X_train, y_train) # 输出最佳参数 print("Best parameters found: ", grid_search.best_params_) # 使用最佳参数训练模型 best_clf = grid_search.best_estimator_ # 在测试集上评估模型 y_pred = best_clf.predict(X_test) print("Accuracy on test set: ", accuracy_score(y_test, y_pred)) ``` 在上述代码中,我们首先加载了Iris数据集,并将其划分为训练集和测试集。然后,我们定义了一个决策树分类器以及一个包含多个参数的网格。通过`GridSearchCV`,我们指定了交叉验证的折数(`cv=5`)、评分方法(`scoring='accuracy'`,即准确率)、是否打印搜索过程的详细信息(`verbose=2`),以及并行计算的线程数(`n_jobs=-1`,表示使用所有可用的CPU核心)。执行`fit`方法后,`GridSearchCV`会自动找到最优的参数组合,并输出这些信息。最后,我们使用最佳参数在测试集上评估了模型的性能。 #### 5.2.1.4 注意事项 - **计算资源**:网格搜索的计算成本可能很高,特别是对于复杂的模型和大量的参数组合。在实际应用中,应根据计算资源合理选择参数空间的大小。 - **随机性**:某些机器学习算法(如随机森林、梯度提升树等)具有随机性,即使使用相同的参数和数据集,每次训练得到的模型也可能不同。为了缓解这种随机性对结果的影响,可以考虑在网格搜索过程中设置随机种子。 - **参数依赖**:在定义参数网格时,应考虑到参数之间的可能依赖关系。有时,某些参数的最优值可能依赖于其他参数的值。 - **评估指标**:根据任务的具体需求选择合适的评估指标,如分类问题中的准确率、召回率、F1分数,以及回归问题中的均方误差(MSE)等。 总之,简单网格搜索是一种有效的超参数调优方法,尤其适用于参数空间相对较小且计算资源相对充足的情况。通过合理的参数定义和评估方法选择,网格搜索能够帮助我们找到更优的模型参数,从而提高模型的性能。
上一篇:
5.2 网格搜索
下一篇:
5.2.2 参数过拟合的风险与验证集
该分类下的相关小册推荐:
Python与办公-玩转PPT
Python编程轻松进阶(五)
Python合辑7-集合、列表与元组
Python合辑11-闭包函数
Python机器学习实战
Python神经网络入门与实践
Python合辑13-面向对象编程案例(上)
剑指Python(磨刀不误砍柴工)
Python甚础Django与爬虫
Python3网络爬虫开发实战(下)
Python数据分析与挖掘实战(下)
Python编程轻松进阶(三)