首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 1.7.2 衡量模型是否成功:训练数据与测试数据 在Python机器学习项目的旅途中,评估模型的性能是至关重要的步骤。这不仅关乎于确认模型是否达到了预期的效果,还涉及到如何进一步优化以提升其泛化能力。本章将深入探讨如何通过合理划分训练数据与测试数据来科学地衡量模型的成功,以及这一过程中需要注意的关键点。 #### 1.7.2.1 引言 机器学习模型的性能评估,核心在于理解模型在未见过的数据上的表现如何,即其泛化能力。为了实现这一目标,我们通常将数据集划分为三个部分:训练集(Training Set)、验证集(Validation Set,有时与测试集合并处理)、和测试集(Test Set)。然而,在许多基础教程或实践中,为了简化流程,常直接划分为训练集和测试集两部分。本章节将重点讲解这一简化模式下的操作与理解。 #### 1.7.2.2 为什么需要划分数据集 **1. 避免过拟合**:过拟合是机器学习中的一个常见问题,指的是模型在训练数据上表现极佳,但在新数据(测试集)上性能显著下降的现象。通过划分训练集和测试集,我们可以评估模型在未知数据上的表现,从而识别并避免过拟合。 **2. 评估模型的真实性能**:训练集上的性能只能反映模型对已知数据的拟合程度,而测试集上的性能则更接近模型在真实世界应用中的表现。 **3. 指导模型选择与调优**:在多个候选模型中选择最佳模型,或对一个模型进行参数调优时,测试集的性能指标是关键的决策依据。 #### 1.7.2.3 数据集划分的原则 **1. 随机性**:数据集应随机划分为训练集和测试集,以确保两者在数据分布上尽可能接近,减少因数据划分方式导致的偏差。 **2. 独立性**:测试集应与训练集完全独立,即测试集中的数据在模型训练过程中不应被使用或“看到”。 **3. 比例合理**:训练集应占据数据集的大部分(如70%-80%),以充分训练模型;测试集则用于评估模型性能,其比例一般不低于20%。比例的具体选择需根据数据量大小和模型复杂度来定。 #### 1.7.2.4 划分数据集的方法 在Python中,有多种方式可以划分数据集,以下是一些常用的方法: **1. 使用scikit-learn的`train_test_split`函数** scikit-learn是Python中广泛使用的机器学习库,它提供了`train_test_split`函数来方便地进行数据集划分。 ```python from sklearn.model_selection import train_test_split # 假设X是特征数据,y是目标变量 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 这里,`test_size=0.2`表示测试集占总数据的20%,`random_state`是一个随机种子,用于确保每次划分结果的一致性。 **2. 手动划分** 对于小数据集或特定需求,有时需要手动划分数据集。这可以通过索引选择、切片操作或逻辑条件筛选等方式实现。 ```python # 假设数据集大小为1000,我们想要前800个样本作为训练集 X_train = X[:800] y_train = y[:800] X_test = X[800:] y_test = y[800:] ``` 但请注意,这种方法缺乏随机性,可能导致数据划分不均。 **3. 使用分层抽样** 当目标变量(y)在不同类别中的分布不均衡时,应考虑使用分层抽样来确保训练集和测试集中各类别的比例一致。`train_test_split`函数通过`stratify=y`参数支持分层抽样。 ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y) ``` #### 1.7.2.5 评估模型性能 一旦数据集被划分为训练集和测试集,就可以使用训练集来训练模型,并使用测试集来评估模型的性能了。评估指标的选择取决于具体的机器学习任务,常见的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1分数(F1 Score)等。 ```python from sklearn.metrics import accuracy_score # 假设model是已经训练好的模型,y_pred是模型对测试集的预测结果 y_pred = model.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print(f"Model accuracy: {accuracy:.2f}") ``` #### 1.7.2.6 注意事项 **1. 多次划分与交叉验证**:单次划分数据集可能因随机性导致评估结果不稳定,可通过多次划分或使用交叉验证(如k折交叉验证)来提高评估的可靠性。 **2. 数据泄露**:在划分数据集时,需特别注意避免数据泄露,即测试集中的信息以某种方式间接参与了模型的训练过程。 **3. 评估指标的选择**:根据具体任务选择合适的评估指标,避免单一指标可能带来的误导。 **4. 模型的泛化能力**:最终目标是使模型具有良好的泛化能力,即在未知数据上也能表现良好。因此,在评估模型时,不仅要关注其在测试集上的表现,还要思考如何进一步提高其泛化能力。 #### 结语 通过合理划分训练数据与测试数据,并科学评估模型性能,我们可以更准确地了解模型的实际效果,为后续的模型选择与调优提供有力支持。在Python机器学习项目中,这一步骤是不可或缺的关键环节,也是迈向成功的重要一步。希望本章内容能为您的机器学习之旅增添一份助力。
上一篇:
1.7.1 初识数据
下一篇:
1.7.3 要事第 一:观察数据
该分类下的相关小册推荐:
Python高性能编程与实战
Python机器学习实战
Python面试指南
实战Python网络爬虫
Python与办公-玩转PDF
Python爬虫入门与实战开发(上)
Python合辑13-面向对象编程案例(上)
剑指Python(万变不离其宗)
Python合辑9-判断和循环
Python神经网络入门与实践
Python合辑12-面向对象
Python高并发编程与实战