如何进行训练测试分割,以便Python中的每个类都有足够的训练和测试数据?
我有一个数据集,它有5个类,分布如下: 从分布中可以明显看出,类如何进行训练测试分割,以便Python中的每个类都有足够的训练和测试数据?,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我有一个数据集,它有5个类,分布如下: 从分布中可以明显看出,类1的样本非常少 如何对这些数据进行训练测试分割,以便Python中的每个类别都有足够的训练和测试数据?train\u test\u split函数默认情况下在分割之前对数据集进行洗牌,除非您将shuffle参数值设置为False。我认为,如果shuffle为真,它可以确保数据集的训练部分将具有来自所有类别的值。此外,如果您希望训练测试分割的结果具有确定性,则可以使用random\u state参数。请参阅第页以了解更多信息。希望有
1
的样本非常少
如何对这些数据进行训练测试分割,以便Python中的每个类别都有足够的训练和测试数据?
train\u test\u split
函数默认情况下在分割之前对数据集进行洗牌,除非您将shuffle
参数值设置为False。我认为,如果shuffle
为真,它可以确保数据集的训练部分将具有来自所有类别的值。此外,如果您希望训练测试分割的结果具有确定性,则可以使用random\u state
参数。请参阅第页以了解更多信息。希望有帮助。将训练测试分割中的分层参数设置为目标列
分层
将确保每个类平均分配
X\u系列,X\u测试,y\u系列,y\u测试=系列测试分割(X,y,测试大小=0.3,分层=y)
您可以获得每个类别的70%。。类似于df.groupby('category').apply(train\u test\u split,args=0.7,…)
的方法,在这里,您填写正确的参数,而不是args
等。通常,当您执行df.sample
时,它会随机对您的训练集进行采样。从理论上讲,这会给你相同的班级分布。也就是说,你总是可以多走一步,按照@rafaelc的建议去做。我认为你提供的答案不能满足OP的要求,因为训练测试分割(…..,测试大小=0.2,shuffle=False)
不能确保从每个类中平均抽取样本。您可能会找到手动分割数据的方法,方法是正确地分割数据,然后将数据馈送到NN或在NN上使用ML。由于每个类别的训练样本大小可能不同,因此不可能每个场景都从每个类别中平均分割训练数据集。我提到,它将确保从每个类别中至少抽取一些我并不意味着平等的样本。谢谢。@RubelHassan既然您接受了这样一个事实,即由于每个类别的训练样本的大小可能不同,可能不可能每个场景都从每个类别中平均分割训练数据集,那么它如何回答OP的问题呢?请注意,这个问题与一个称为不平衡数据的概念有关。因此,它建议要么修改建议的答案,要么删除它,以免被否决。@mnm OP的问题是,我如何对这些数据进行训练测试分割,以便在Python中的每个类别中都有足够的训练和测试数据?你能看到他在哪里要求平等吗。