首页
技术小册
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 交叉验证 在机器学习的实践中,模型的评估与选择是至关重要的环节。一个模型在训练集上表现优异,并不意味着它在未知数据(即测试集)上也能同样出色。为了更准确地评估模型的泛化能力,减少过拟合或欠拟合的风险,交叉验证(Cross-Validation)作为一种强大的技术应运而生。本章将深入探讨交叉验证的原理、方法及其在Python中的实现,为构建更加稳健的机器学习模型奠定基础。 #### 5.1.1 交叉验证概述 交叉验证的基本思想是将原始数据集分为几个部分,通过轮流使用其中的一部分作为测试集,其余部分作为训练集,来评估模型的性能。这种做法可以更加全面地利用有限的数据资源,同时减少因数据划分不当导致的评估偏差。交叉验证不仅可以用于评估模型性能,还可以用于模型选择,即在不同的模型参数或算法之间进行比较,选择最优的模型。 #### 5.1.2 交叉验证的类型 根据数据分割和重用的方式,交叉验证可以细分为多种类型,其中最常见的有以下几种: 1. **留一交叉验证(Leave-One-Out Cross-Validation, LOOCV)**: 每次只留一个样本作为测试集,其余所有样本作为训练集。这种方法虽然评估结果最为精确,但计算成本非常高,特别是当数据集较大时。 2. **K折交叉验证(K-Fold Cross-Validation)**: 将数据集随机分割成K个大小相近的子集,每次选择其中一个子集作为测试集,其余K-1个子集作为训练集。这个过程重复K次,每次选择不同的子集作为测试集,最终评估结果是K次评估的平均值。K折交叉验证是实际应用中最常用的交叉验证方法之一。 3. **分层K折交叉验证(Stratified K-Fold Cross-Validation)**: 在K折交叉验证的基础上,确保每个子集中各类别的样本比例与原始数据集中的比例大致相同。这对于处理不平衡数据集尤其重要,有助于更准确地评估模型在各类别上的性能。 4. **留P交叉验证(Leave-P-Out Cross-Validation)**: 类似于留一交叉验证,但每次留下P个样本作为测试集,而不是仅一个。这种方法在计算复杂度和评估精度之间提供了一个折衷方案。 #### 5.1.3 交叉验证在Python中的实现 在Python中,`scikit-learn`库提供了强大的交叉验证工具,使得实现各种交叉验证策略变得简单高效。下面以K折交叉验证为例,展示如何在Python中使用`scikit-learn`进行模型评估和选择。 ##### 导入必要的库 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, cross_val_score, KFold from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score ``` ##### 加载数据集 ```python # 加载鸢尾花数据集 iris = load_iris() X = iris.data y = iris.target ``` ##### 初始化模型 ```python # 使用随机森林分类器作为示例 clf = RandomForestClassifier(n_estimators=100, random_state=42) ``` ##### 使用K折交叉验证评估模型 ```python # 使用默认的5折交叉验证 scores = cross_val_score(clf, X, y, cv=5) print("Accuracy scores for each fold:", scores) print("Mean accuracy: {:.2f}".format(scores.mean())) ``` ##### 自定义K折交叉验证 如果你需要更精细地控制交叉验证的过程,可以手动设置`KFold`对象,并作为`cross_val_score`的`cv`参数传入。 ```python # 设置一个KFold对象,指定分割的折数 kf = KFold(n_splits=5, shuffle=True, random_state=42) # 使用自定义的KFold对象进行交叉验证 scores_custom = cross_val_score(clf, X, y, cv=kf) print("Custom KFold accuracy scores:", scores_custom) print("Mean accuracy with custom KFold: {:.2f}".format(scores_custom.mean())) ``` #### 5.1.4 交叉验证的注意事项 1. **选择合适的K值**:K值的选择对交叉验证的结果有重要影响。K值太小,评估结果的稳定性可能不足;K值太大,计算成本会显著增加。通常,K取5或10是一个合理的起点。 2. **随机性**:在数据分割和模型训练过程中,引入随机性(如通过`shuffle=True`)可以避免因数据划分顺序不同而导致的偏差。 3. **计算成本**:交叉验证,尤其是留一交叉验证和K值较大的K折交叉验证,可能涉及大量的计算和模型训练,因此需要权衡评估精度和计算资源。 4. **结合模型选择**:交叉验证不仅用于评估单个模型的性能,还可以用于模型选择,通过比较不同参数或不同算法下的模型性能,选择最优的模型配置。 5. **验证集的使用**:在某些情况下,除了训练集和测试集外,还会设置一个验证集(Validation Set)。验证集用于在模型选择阶段调整模型参数,而测试集则用于最终评估模型的泛化能力。然而,在数据量有限的情况下,使用交叉验证可以减少对额外验证集的需求。 #### 5.1.5 结论 交叉验证作为机器学习模型评估与选择的重要工具,通过合理的数据分割和重复评估,为模型的泛化能力提供了更加可靠的估计。在Python中,利用`scikit-learn`库可以方便地实现各种交叉验证策略,帮助数据科学家和机器学习工程师构建更加稳健和高效的模型。通过深入理解交叉验证的原理和技巧,并结合实际应用场景进行灵活应用,可以显著提升机器学习项目的成功率和效果。
上一篇:
4.6 利用专家知识
下一篇:
5.1.1 scikit-learn 中的交叉验证
该分类下的相关小册推荐:
Python合辑1-Python语言基础
Python合辑3-字符串用法深度总结
Python编程轻松进阶(五)
剑指Python(万变不离其宗)
Python与办公-玩转PPT
Python合辑13-面向对象编程案例(上)
Python合辑9-判断和循环
实战Python网络爬虫
Python机器学习基础教程(上)
Python合辑11-闭包函数
Python3网络爬虫开发实战(上)
Python合辑2-字符串常用方法