在python中拆分数据,使每个主题保持在一个折叠中(m折叠交叉验证)

在python中拆分数据,使每个主题保持在一个折叠中(m折叠交叉验证),python,machine-learning,classification,gridsearchcv,Python,Machine Learning,Classification,Gridsearchcv,事情是这样的。 我正在为5名患者(P1、P2、P5)应用一个二进制分类器。每个患者有100个数据样本,输出为0或1 因此,我将一名患者(比如P5)放在一边作为测试数据,并将其余患者用于验证和培训。但是我也想找到分类器(比如SVM)的最优超参数数量,所以我也使用了4倍交叉验证 但是,我希望确保将训练数据拆分为交叉训练和交叉测试,以便一名患者的所有样本都保持交叉测试。我不希望它被洗牌,因为我在测试和训练中都会有患者的数据,这是不好的 我在python中使用GridSearchCV来分割数据,但我不知

事情是这样的。 我正在为5名患者(P1、P2、P5)应用一个二进制分类器。每个患者有100个数据样本,输出为0或1

因此,我将一名患者(比如P5)放在一边作为测试数据,并将其余患者用于验证和培训。但是我也想找到分类器(比如SVM)的最优超参数数量,所以我也使用了4倍交叉验证

但是,我希望确保将训练数据拆分为交叉训练和交叉测试,以便一名患者的所有样本都保持交叉测试。我不希望它被洗牌,因为我在测试和训练中都会有患者的数据,这是不好的

我在python中使用GridSearchCV来分割数据,但我不知道如何对其进行自定义,以便我们能够: 测试折叠中的100个p1样品和训练折叠中的300个p2、p3、p4样品。。。。。。。。。。测试折叠中的100个p4样本和训练折叠中的所有300个p1、p2、p3样本

换句话说,我想创建一个患者指标,以便gridasearchCv根据该指标分割数据


我们有这方面的软件包吗?或者我应该尝试在不使用GridSearchCV或任何类似性质的软件包的情况下手动编写它?

您应该使用scikit learn
GroupKFold
。它应该很容易解决你的问题。使用患者列表作为组,例如如果样本
i
属于患者2,则患者[i]=“p2”

这是我的建议