首页
技术小册
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机器学习基础教程(下)
### 6.4.3 访问网格搜索管道中的属性 在Python的机器学习实践中,网格搜索(Grid Search)是一种强大的超参数调优技术,它系统地遍历多种参数的组合,通过交叉验证来确定最佳模型参数。当我们将网格搜索与管道(Pipeline)结合使用时,不仅可以自动化特征预处理、模型训练与评估的流程,还能有效地管理复杂的机器学习工作流。然而,在网格搜索完成后,如何有效地访问并理解这些过程中的关键属性,对于模型调优和后续分析至关重要。本章将深入探讨如何在Python中使用scikit-learn库来访问网格搜索管道中的属性。 #### 6.4.3.1 理解网格搜索管道的结构 在深入探讨如何访问属性之前,首先需要理解网格搜索管道的基本结构。网格搜索(`GridSearchCV`)本身是一个封装器(wrapper),它接受一个估计器(estimator)作为输入,这个估计器可以是任何实现了`fit`方法的对象,包括一个完整的管道(`Pipeline`)。管道则是一个将多个转换步骤(如特征缩放、标准化)和最终估计器(如分类器或回归器)串联起来的序列。 当网格搜索与管道结合时,它会遍历所有指定的参数组合,对每一组参数都应用整个管道流程,并评估其性能。这意味着,网格搜索的结果不仅包含了最佳参数组合,还隐含了在这些参数下管道各步骤的表现。 #### 6.4.3.2 访问最佳参数 访问网格搜索管道中的首要属性是最佳参数组合。这可以通过`GridSearchCV`对象的`best_params_`属性来实现。`best_params_`是一个字典,键是参数名(包括管道中每一步骤的参数),值是对应的最佳参数值。 ```python from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV # 构建管道 pipeline = Pipeline([ ('scaler', StandardScaler()), ('classifier', SVC()) ]) # 定义参数网格 param_grid = { 'classifier__C': [0.1, 1, 10], 'classifier__kernel': ['linear', 'rbf'], 'classifier__gamma': ['auto', 'scale'] } # 实例化网格搜索 grid_search = GridSearchCV(pipeline, param_grid, cv=5) # 拟合数据 grid_search.fit(X_train, y_train) # 访问最佳参数 best_params = grid_search.best_params_ print("Best Parameters:", best_params) ``` #### 6.4.3.3 访问最佳估计器 除了最佳参数外,了解在最佳参数下整个管道(特别是最终估计器)的具体表现也很重要。这可以通过`GridSearchCV`对象的`best_estimator_`属性来实现。`best_estimator_`是一个经过训练的管道实例,其参数已经被设置为最佳参数组合。 ```python # 访问最佳估计器 best_estimator = grid_search.best_estimator_ # 可以进一步访问最佳估计器中的组件 best_classifier = best_estimator.named_steps['classifier'] print("Best Classifier:", best_classifier) ``` #### 6.4.3.4 访问交叉验证结果 网格搜索在寻找最佳参数的过程中,会进行多次交叉验证。了解这些交叉验证的结果对于深入分析模型性能至关重要。`GridSearchCV`对象的`cv_results_`属性提供了丰富的交叉验证结果,包括每轮交叉验证的分数、时间消耗、参数设置等。 ```python # 访问交叉验证结果 cv_results = grid_search.cv_results_ # 查看部分结果 print("Keys in cv_results_:", cv_results.keys()) # 例如,查看每组参数的平均测试分数 mean_test_scores = cv_results['mean_test_score'] params = cv_results['params'] for param, score in zip(params, mean_test_scores): print(f"Parameters: {param}, Mean Test Score: {score:.4f}") ``` #### 6.4.3.5 深入理解网格搜索的输出 除了上述直接访问的属性外,理解网格搜索的输出对于优化机器学习模型同样重要。网格搜索的输出不仅限于最佳参数和最佳估计器,还包括了模型选择过程中的许多细节,如每个参数组合的性能表现、训练时间等。这些信息对于评估模型的健壮性、选择更高效的参数空间或识别潜在的性能瓶颈非常有帮助。 #### 6.4.3.6 网格搜索的可视化 将网格搜索的结果可视化是理解模型性能随参数变化的有效方式。虽然scikit-learn本身不直接提供可视化工具,但我们可以使用matplotlib、seaborn或pandas的内置绘图功能来展示`cv_results_`中的数据。例如,可以绘制不同参数下的平均测试分数,以直观地比较不同参数组合的效果。 ```python import pandas as pd import matplotlib.pyplot as plt # 将cv_results_转换为DataFrame以便处理 results_df = pd.DataFrame(cv_results) # 绘制参数与平均测试分数的关系图 plt.figure(figsize=(10, 6)) for param in ['classifier__C', 'classifier__kernel', 'classifier__gamma']: plt.subplot(1, 3, results_df['param_'+param].nunique()) sns.boxplot(x='param_'+param, y='mean_test_score', data=results_df) plt.title(param) plt.xlabel(param.replace('classifier__', '')) plt.ylabel('Mean Test Score') plt.tight_layout() plt.show() ``` #### 结论 访问网格搜索管道中的属性是理解和优化机器学习模型的关键步骤。通过`best_params_`、`best_estimator_`和`cv_results_`等属性,我们可以深入了解模型在不同参数组合下的表现,从而做出更加明智的决策。此外,将网格搜索的结果可视化可以进一步加深我们对模型性能与参数之间关系的理解。在未来的机器学习实践中,掌握这些技巧将使我们能够更有效地进行模型调优和性能评估。
上一篇:
6.4.2 访问步骤属性
下一篇:
6.5 网格搜索预处理步骤与模型参数
该分类下的相关小册推荐:
Python合辑14-面向对象编程案例(下)
Python合辑7-集合、列表与元组
机器学习算法原理与实战
Python高性能编程与实战
Python编程轻松进阶(一)
Python与办公-玩转Excel
Python合辑13-面向对象编程案例(上)
Python爬虫入门与实战开发(下)
Python数据分析与挖掘实战(上)
Python编程轻松进阶(三)
Python编程轻松进阶(四)
Python面试指南