拆分数据时,如何在每个类的训练集中获得 50% 的示例和在测试集中获得 50% 的示例?

数据挖掘 Python scikit-学习 数据集
2021-09-23 03:18:23

l 有一个包含 10 个类的 200 个示例的数据集。l 想把数据集分成50%的训练集和50%的测试集。

对于每个班级,我有 20 个例子。因此,我想为每个类获得:10 个训练示例和 10 个测试示例。

这是我的课程:

classes=['BenchPress', 'ApplyLipstick', 'BabyCrawling', 'BandMarching', 'Archery', 'Basketball', 'ApplyEyeMakeup', 'BalanceBeam', 'BaseballPitch', 'BasketballDunk']

我尝试了以下方法:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(final_data, true_label, test_size=0.50, random_state=42)

然而,它返回一个 50% 的训练集和 50% 的测试集,而不考虑每个类的比例(我希望每个类在测试集中获得 10 个示例,在训练集中获得 10 个示例)。这是结果拆分:

在此处输入图像描述

1个回答

sklearn 版本 0.17 及以后的版本train_test_split应该通过使用 stratify 参数为您提供分层结果。

示例代码:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(final_data, true_label, test_size=0.50, random_state=42, stratify=true_label)

从有关参数分层的文档中:

分层:类数组或无(默认为无)如果不是无,则以分层方式拆分数据,将其用作标签数组。0.17 版新功能:分层拆分

希望这可以帮助!