Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何进行训练测试分割,以便Python中的每个类都有足够的训练和测试数据?_Python_Pandas_Scikit Learn - Fatal编程技术网

如何进行训练测试分割,以便Python中的每个类都有足够的训练和测试数据?

如何进行训练测试分割,以便Python中的每个类都有足够的训练和测试数据?,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我有一个数据集,它有5个类,分布如下: 从分布中可以明显看出,类1的样本非常少 如何对这些数据进行训练测试分割,以便Python中的每个类别都有足够的训练和测试数据?train\u test\u split函数默认情况下在分割之前对数据集进行洗牌,除非您将shuffle参数值设置为False。我认为,如果shuffle为真,它可以确保数据集的训练部分将具有来自所有类别的值。此外,如果您希望训练测试分割的结果具有确定性,则可以使用random\u state参数。请参阅第页以了解更多信息。希望有

我有一个数据集,它有5个类,分布如下:

从分布中可以明显看出,类
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中的每个类别中都有足够的训练和测试数据?你能看到他在哪里要求平等吗。