首页
技术小册
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.2 访问步骤属性 在Python机器学习的实践中,尤其是在使用诸如scikit-learn这样的库时,我们经常会遇到需要构建复杂的机器学习管道(Pipelines)来整合数据预处理、特征选择、模型训练等多个步骤。这些管道中的每一步都被封装成了特定的对象,每个对象都拥有自己的属性和方法。理解并正确地访问这些步骤的属性,是优化模型、调试过程以及进行后续分析的关键。本章节将深入探讨如何在Python中访问机器学习管道(Pipeline)中各个步骤的属性。 #### 6.4.2.1 理解Pipeline结构 在scikit-learn中,`Pipeline`是一个非常重要的概念,它允许我们将多个转换步骤(如标准化、多项式特征扩展等)和最终的估计器(如分类器或回归器)串联起来,形成一个统一的处理流程。这样做的好处在于,我们可以将整个流程视为一个单一的步骤进行训练和预测,简化了数据处理的复杂性,同时也方便了模型的保存和重用。 一个基本的Pipeline可以通过以下方式创建: ```python from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression # 创建Pipeline pipeline = Pipeline(steps=[ ('scaler', StandardScaler()), ('logistic', LogisticRegression()) ]) ``` 在这个例子中,Pipeline包含了两个步骤:一个`StandardScaler`用于数据标准化,和一个`LogisticRegression`分类器。每个步骤都被赋予了一个唯一的名称(如'scaler'和'logistic'),这是后续访问步骤属性的关键。 #### 6.4.2.2 访问步骤属性的方法 在Pipeline中,我们可以通过几种方式访问各个步骤的属性。以下是一些常用的方法: ##### 1. 使用`named_steps`属性 `Pipeline`对象提供了一个`named_steps`属性,它是一个字典,包含了Pipeline中所有步骤的名称到步骤实例的映射。通过这个属性,我们可以直接访问任何步骤的实例,进而访问其属性或方法。 ```python # 访问scaler的mean_和scale_属性 scaler_mean = pipeline.named_steps['scaler'].mean_ scaler_scale = pipeline.named_steps['scaler'].scale_ # 访问logistic回归模型的coef_和intercept_属性 logistic_coef = pipeline.named_steps['logistic'].coef_ logistic_intercept = pipeline.named_steps['logistic'].intercept_ ``` ##### 2. 使用`get_params`和`set_params`方法 虽然`get_params`和`set_params`方法主要用于获取和设置Pipeline的参数(包括步骤的参数),但它们也可以间接地用于访问步骤的某些属性。然而,需要注意的是,并非所有步骤的属性都可以通过这种方式访问,因为`get_params`通常只返回那些可以通过`set_params`设置的参数。 ```python # 获取scaler的某些参数(如果它们是可设置的) scaler_params = pipeline.get_params(deep=True)['scaler'] # 注意:这里返回的是scaler的参数字典,而不是scaler的属性 ``` ##### 3. 直接通过步骤实例 如果我们在创建Pipeline之外还保留了步骤实例的引用,那么我们可以直接通过这些引用访问它们的属性。这种方法在调试或需要深入分析步骤内部状态时特别有用。 ```python # 假设我们在Pipeline创建之前已经创建了scaler和logistic的实例 # ... # 直接访问scaler的属性 scaler_mean_direct = scaler.mean_ # 直接访问logistic回归模型的属性 logistic_coef_direct = logistic.coef_ ``` #### 6.4.2.3 访问步骤属性的应用场景 访问步骤属性在多种场景下都非常有用,包括但不限于: - **模型调优**:通过分析特征缩放后的均值和标准差(如`scaler.mean_`和`scaler.scale_`),我们可以了解数据预处理的效果,进而调整预处理策略。 - **特征重要性评估**:对于某些模型(如决策树、随机森林等),我们可以查看特征重要性(通常通过模型的`feature_importances_`属性获得),这有助于理解哪些特征对模型预测贡献最大。 - **模型诊断**:通过分析模型的系数(如线性模型的`coef_`)或截距(`intercept_`),我们可以理解模型是如何根据输入特征做出预测的,这对于模型的可解释性至关重要。 - **数据可视化**:将步骤的属性(如数据分布、特征重要性等)可视化,可以帮助我们更直观地理解数据和模型。 #### 6.4.2.4 注意事项 - **属性与参数的区别**:要清晰地区分步骤的属性和参数。属性通常是步骤在处理数据或拟合模型过程中自动生成的(如`mean_`、`scale_`),而参数是我们在创建步骤实例时指定的(如`StandardScaler`的`with_mean`和`with_std`)。 - **安全性**:在访问步骤属性时,要确保Pipeline已经正确拟合(即已经调用了`fit`方法),因为某些属性(如`coef_`、`intercept_`)在拟合之前是不可用的。 - **灵活性**:虽然Pipeline提供了统一的方式来处理多个步骤,但在某些情况下,可能需要单独处理某个步骤(如为了进行特征选择或调整参数),这时直接访问步骤的实例可能会更加方便。 通过深入理解和灵活运用访问步骤属性的方法,我们可以更有效地利用Python的机器学习库来构建和优化复杂的机器学习模型。
上一篇:
6.4.1 用make_pipeline 方便地创建管道
下一篇:
6.4.3 访问网格搜索管道中的属性
该分类下的相关小册推荐:
Python编程轻松进阶(二)
Python合辑6-字典专题
Python合辑13-面向对象编程案例(上)
Python合辑3-字符串用法深度总结
Python3网络爬虫开发实战(下)
Python编程轻松进阶(四)
Python与办公-玩转PDF
Python与办公-玩转Excel
Python与办公-玩转PPT
Python3网络爬虫开发实战(上)
Python面试指南
Python高并发编程与实战