python划分训练集和测试集_如何在Python中划分训练/测试集并进行交叉验证

本文介绍了Python中如何划分训练集和测试集以防止模型过拟合,通过Scikit-Learn库的train_test_split方法进行数据划分,并展示了线性回归模型在糖尿病数据集上的应用。此外,还探讨了交叉验证的概念,包括k-折交叉验证和Leave-One-Out方法,以提高模型的泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编者按:训练集/测试集划分和交叉验证一直是数据科学和数据分析中的两个相当重要的概念,它们也是防止模型过拟合的常用工具。为了更好地掌握它们,在这篇文章中,我们会以统计模型为例,先从理论角度简要介绍相关术语,然后给出一个Python实现的案例。

什么是模型过拟合/欠拟合

在统计学和机器学习中,通常我们会把数据分成两个子集:训练数据和测试数据(有时也分为训练、验证、测试三个),然后用训练集训练模型,用测试集检验模型的学习效果。但当我们这么做时,模型可能会出现以下两种情况:一是模型过度拟合数据,二是模型不能很好地拟合数据。常言道过犹不及,这两种情况都是我们要极力规避的,因为它们会影响模型的预测性能——预测准确率较低,或是泛化性太差,没法把学到的经验推广到其他数据上(也就是没法预测其他数据)。

过拟合

模型过拟合意味着我们把模型“训练得太好了”,通过一遍又一遍的训练,它已经把训练数据的特征都“死记硬背”了下来。这在模型过于复杂(和观察样本数相比,模型设置的特征/变量太多)时往往更容易发生。过拟合的缺点是模型只对训练数据非常准确,但在未经训练的数据或全新数据上非常不准确,因为它不是泛化的,没法推广结果,对其他数据作出任何推断。

更确切地说,过拟合的模型学习到的只是训练数据中的“噪声”,而不是数据中变量之间的实际关系。显然,这些“噪声”是训练数据独有的,这也决定了它不能准确预测任何新数据集。

欠拟合

和过拟合相比,欠拟合是另一个极端,它意味着模型连拟合训练数据都做不到,没能真正把握数据的趋势。毫无疑问,一个欠拟合的模型也是不能被推广到新数据的,它和过拟合恰恰相反,是模型过于简单(没有足够的预测变量/自变量)的结果。例如,当我们用线性模型(比如线性回归)拟合非线性数据时,模型就很可能会欠拟合。

o4YBAFv7RUyAB3leAAA4FoHF_ZM277.png

欠拟合、恰到好处和过拟合

值得注意的是,在实践中,欠拟合远不像过拟合那么普遍。但我们还是要做到在数据分析中同时警惕这两个问题,找到它们的中间地带。而解决问题的首选方案就是划分训练/测试数据和交叉验证。

划分训练/测试数据

正如之前提到的,我们使用的数据通常会被划分为训练集和测试集。其中训练集包含输入的对应已知输出,通过在上面进行训练,模型可以把学到的特征关系推广到其他数据上,而测试集就是模型性能的试金石。

o4YBAFv7RUyAZJMlAABJIIfc7TI078.png

那么在Python中,我们能怎么执行这个操作呢?这里我们介绍一种用Scikit-Learn库,特别是traintestsplit的方法。让我们先从导入库开始:

import pandas as pd

from sklearn import datasets, l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值