pandas 上的 sklearn train_test_split 按多列分层

pandasAI

1个回答

写回答

狐狸布朗

2025-06-30 12:15

+ 关注

Pandas
Pandas

使用Pandas和sklearn进行多列分层的训练集和测试集划分

在机器学习中,我们经常需要将数据集划分为训练集和测试集,以便评估模型的性能。通常情况下,我们使用sklearn中的trAIn_test_split函数来进行划分。然而,在某些情况下,我们希望根据多列的取值来进行分层划分,以确保训练集和测试集中的数据在多个特征上具有相似的分布。这时,我们可以借助Pandas库和sklearn库的结合使用来实现这个目标。

案例背景

假设我们有一个数据集,其中包含了学生的成绩和性别两个特征。我们希望根据这两个特征来划分训练集和测试集,以确保训练集和测试集中的数据在成绩和性别上具有相似的分布。

代码实现

首先,我们需要导入所需的库和数据集:

Python

import Pandas as pd

from sklearn.model_selection import trAIn_test_split

# 读取数据集

data = pd.read_csv('student_data.csv')

# 打印数据集的前几行

print(data.head())

接下来,我们可以使用Pandas的groupby函数来根据成绩和性别进行分组,并计算每个分组的数量:

Python

# 根据成绩和性别进行分组,并计算每个分组的数量

grouped_data = data.groupby(['成绩', '性别']).size().reset_index(name='数量')

# 打印分组后的数据

print(grouped_data)

然后,我们可以使用sklearn的trAIn_test_split函数来进行多列分层的训练集和测试集划分。我们可以通过设置stratify参数为多列的组合来实现这一目标:

Python

# 划分训练集和测试集

trAIn_data, test_data = trAIn_test_split(data, test_size=0.2, stratify=data[['成绩', '性别']])

# 打印训练集和测试集的形状

print("训练集形状:", trAIn_data.shape)

print("测试集形状:", test_data.shape)

多列分层的训练集和测试集划分的优势

通过使用多列分层的训练集和测试集划分,我们可以确保训练集和测试集在多个特征上具有相似的分布。这样可以提高模型在实际应用中的泛化能力,减少因特征分布不均匀而导致的模型性能下降的情况。

在本文中,我们介绍了如何使用Pandas和sklearn进行多列分层的训练集和测试集划分。我们以一个学生成绩和性别的案例为例,演示了如何根据这两个特征来进行分层划分,并通过代码实现了这一过程。多列分层的训练集和测试集划分可以提高模型的泛化能力,对于保证模型的性能具有重要作用。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号