-1

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

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

但是,我想确保将训练数据拆分为 cross_training 和 cross_testing,以便一名患者的所有样本都保留在 cross_testing 折叠中。我不希望它被打乱,因为我会在测试和训练折叠中都有患者的数据,这不好。

我在 python 中使用 GridSearchCV 来拆分数据,但我不知道如何自定义它,以便我们将拥有:100 个 p1 样本在测试折叠中,所有 300 个 p2、p3、p4 样本在训练折叠中..... ..... 测试折叠中的 100 个 p4 样本和训练折叠中的所有 300 个 p1、p2、p3 样本。

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

我们是否有一个包,或者我应该尝试在不使用 GridSearchCV 或任何类似性质的情况下手动编写它?

4

1 回答 1

0

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

这是文档

于 2019-01-29T08:26:21.767 回答