首页
技术小册
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.1.1 scikit-learn 中的交叉验证 在机器学习的实践中,模型评估是不可或缺的一环,它直接关系到我们构建的模型能否有效地泛化到新数据上。交叉验证(Cross-Validation, CV)作为一种强大的评估技术,通过多次训练和测试数据的划分,有效避免了过拟合,并给出了模型性能的更稳健估计。在Python的scikit-learn库中,交叉验证被封装成了易于使用的接口,极大地简化了模型评估的流程。本章节将深入介绍scikit-learn中交叉验证的基本原理、常用方法以及如何在实践中应用它们。 #### 5.1.1.1 交叉验证的基本概念 交叉验证的基本思想是将原始数据集分成两部分:训练集和测试集。然而,不同于简单的一次性划分,交叉验证会多次改变训练集和测试集的组合,以更全面地评估模型。通常,这个过程包括以下几个步骤: 1. **数据集分割**:将数据集分成K个大小相近的互斥子集,每个子集都尽可能保持数据分布的一致性。 2. **模型训练与评估**:对于每一次迭代,选择K个子集中的一个作为测试集,剩余K-1个子集作为训练集。使用训练集对模型进行训练,并在测试集上评估模型的性能。 3. **性能记录**:记录每次迭代的模型性能评估结果。 4. **结果汇总**:将所有迭代的结果进行汇总,通常使用平均值作为模型性能的最终估计。 根据K的取值不同,交叉验证可以分为不同的类型,如K折交叉验证(K-Fold Cross-Validation)、留一交叉验证(Leave-One-Out Cross-Validation, LOOCV)等。 #### 5.1.1.2 scikit-learn中的交叉验证工具 scikit-learn提供了丰富的交叉验证工具,主要集中在`sklearn.model_selection`模块中。以下是一些常用的交叉验证方法: 1. **K折交叉验证(KFold)** - `KFold`是最常用的交叉验证方法之一,它将数据集平均分割成K个部分,每次迭代选取其中一部分作为测试集,其余部分作为训练集。 - 使用示例: ```python from sklearn.model_selection import KFold kf = KFold(n_splits=5, shuffle=True, random_state=42) for train_index, test_index in kf.split(X): X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] # 使用X_train, y_train训练模型,并在X_test, y_test上评估 ``` 2. **留一交叉验证(LeaveOneOut)** - 当数据集非常小时,可以使用留一交叉验证,即每次迭代只留下一个样本作为测试集,其余所有样本作为训练集。 - 使用示例: ```python from sklearn.model_selection import LeaveOneOut loo = LeaveOneOut() for train_index, test_index in loo.split(X): X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] # 训练与评估 ``` 3. **分层K折交叉验证(StratifiedKFold)** - 当数据集中各类别样本数量不平衡时,使用分层K折交叉验证可以确保每个折(fold)中各类别的样本比例与原始数据集保持一致。 - 使用示例: ```python from sklearn.model_selection import StratifiedKFold skf = StratifiedKFold(n_splits=5, random_state=42) for train_index, test_index in skf.split(X, y): X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] # 训练与评估 ``` #### 5.1.1.3 交叉验证在模型选择中的应用 交叉验证不仅用于评估单个模型的性能,还常用于模型选择过程。例如,在比较不同算法或调整模型参数时,我们可以使用交叉验证来找到最优的模型配置。 - **算法比较**:通过在不同算法上应用交叉验证,我们可以比较它们的平均性能,从而选择最适合当前任务的算法。 - **参数调优**:对于某些算法,其性能高度依赖于参数设置。通过交叉验证结合网格搜索(Grid Search)或随机搜索(Randomized Search),我们可以系统地探索参数空间,找到最优参数组合。 #### 5.1.1.4 注意事项 - **数据分割的随机性**:在K折交叉验证中,数据的分割是随机的,因此每次运行的结果可能略有不同。为了得到稳定的结果,可以设置随机种子(`random_state`)。 - **计算成本**:交叉验证需要多次训练和评估模型,因此计算成本较高。在实际应用中,应根据数据集大小和模型复杂度合理选择交叉验证的折数。 - **数据泄露**:在进行交叉验证时,需要确保测试集数据在训练过程中不可见,以避免数据泄露导致的性能高估。 #### 5.1.1.5 结论 scikit-learn中的交叉验证工具为机器学习模型的评估与选择提供了强大的支持。通过合理利用这些工具,我们可以更加准确地评估模型性能,优化模型配置,从而为实际问题的解决提供更加可靠的解决方案。在机器学习项目的实践中,掌握交叉验证的方法和技术,是每一位数据科学家和机器学习工程师必备的技能之一。
上一篇:
5.1 交叉验证
下一篇:
5.1.2 交叉验证的优点
该分类下的相关小册推荐:
Python数据分析与挖掘实战(上)
剑指Python(磨刀不误砍柴工)
Python合辑14-面向对象编程案例(下)
Python合辑3-字符串用法深度总结
实战Python网络爬虫
Python编程轻松进阶(一)
Python合辑2-字符串常用方法
Python爬虫入门与实战开发(上)
Python合辑8-变量和运算符
Python合辑7-集合、列表与元组
Python合辑9-判断和循环
Python与办公-玩转PDF