Python中利用pandas与sklearn划分训练集和测试集的方法

Ruby
Ruby
发布时间:2026-10-15| 2人浏览过
原创

本文介绍如何在Python中使用pandas处理数据,并结合sklearn库进行数据集划分。详细讲解train_test_split函数的随机划分方法及KFold交叉验证的原理与参数设置,包括shuffle和random_state的影响,帮助开发者优化模型训练流程。

使用train_test_split进行随机划分

首先,利用model_select子模块提供的train_test_split函数来完成数据集的划分工作。

本示例采用的数据源为Kaggle平台上的Titanic数据集。

划分策略采用随机划分方式。


# 导入pandas模块,sklearn中model_select模块
import pandas as pd
from sklearn.model_select import train_test_split
# 读取数据
data = pd.read_csv('.../titanic_dataset/train.csv')
# 将特征划分到 X 中,标签划分到 Y 中
x = data.iloc[:, 2:]
y = data.loc['Survived']
# 使用train_test_split函数划分数据集(训练集占75%,测试集占25%)

具体代码实现为:x_train, x_test, y_train,y_test = train_test_split(x, y, test_size=0.25, ramdon_state=0)

该方法的不足之处在于:1、造成数据浪费,仅对部分数据进行验证。

2、模型容易发生过拟合现象。

K折交叉验证(KFold)原理与参数

其次,介绍k折交叉验证(kfold)方法。

其核心原理是将整个数据集划分为n个互不相交的子集,每次选取其中一个子集作为测试集,其余n-1个子集合并作为训练集,如此循环共生成n组不同的数据划分方案。

具体使用方式为调用sklearn.model_select.KFold(n_splits=5,shuffle=False,random_state=0)。

参数n_splits用于指定数据集被划分的份数。

参数shuffle控制每次划分前是否进行洗牌操作,False表示划分前不洗牌,导致每次划分结果一致;True表示划分前进行洗牌,使得每次划分结果不同。

参数random_state用于设定随机种子数,以保证结果的可复现性。

在(1)shuffle=False的情况下,观察数据划分的具体表现。


# 不洗牌模式下数据划分情况
import numpy as np
from sklearn.model_selection import KFold
x = np.arange(46).reshape(23,2)
kf = KFold(n_splits=5,shuffle=False)
for train_index, test_index in kf.split(x):
  print(train_index,test_index)
[ 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22] [0 1 2 3 4]
[ 0 1 2 3 4 10 11 12 13 14 15 16 17 18 19 20 21 22] [5 6 7 8 9]
[ 0 1 2 3 4 5 6 7 8 9 15 16 17 18 19 20 21 22] [10 11 12 13 14]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 19 20 21 22] [15 16 17 18]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18] [19 20 21 22]

在(2)shuffle=True的情况下,观察数据划分的具体表现。


import numpy as np
from sklearn.model_selection import KFold
x = np.arange(46).reshape(23,2)
kf = KFold(n_splits=5,shuffle=True)
for train_index, test_index in kf.split(x):
  print(train_index,test_index)
[ 0 3 4 5 6 7 8 9 10 11 12 14 15 16 17 19 20 21] [ 1 2 13 18 22]
[ 0 1 2 3 5 6 7 10 11 13 15 16 17 18 19 20 21 22] [ 4 8 9 12 14]
[ 0 1 2 3 4 7 8 9 10 12 13 14 15 16 17 18 19 22] [ 5 6 11 20 21]
[ 1 2 3 4 5 6 8 9 10 11 12 13 14 15 18 19 20 21 22] [ 0 7 16 17]
[ 0 1 2 4 5 6 7 8 9 11 12 13 14 16 17 18 20 21 22] [ 3 10 15 19]

总结来看,从上述数据对比中可以发现,当shuffle=True时,数据的划分顺序被打乱;而当shuffle=False时,数据的划分保持有序状态。

至此,关于使用pandas划分数据集以实现训练集和测试集的介绍便告一段落。如需了解更多关于pandas划分数据集的相关内容,欢迎搜索本站过往文章或继续阅读下方的相关文章,感谢大家今后对本站的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。