【发布时间】:2017-01-11 11:42:07
【问题描述】:
我正在尝试将数据集的实例分类为两个类之一,a 或 b。 B 是少数类,仅占数据集的 8%。所有实例都分配有一个 id,指示哪个主题生成了数据。因为每个主题生成的多个实例 ID 在数据集中经常重复。
下表只是一个例子,真实的表有大约 100,000 个实例。每个主题 ID 在表中有大约 100 个实例。正如您在下面的“larry”中看到的那样,每个主题都与一个课程相关联。
* field * field * id * class
*******************************************
0 * _ * _ * bob * a
1 * _ * _ * susan * a
2 * _ * _ * susan * a
3 * _ * _ * bob * a
4 * _ * _ * larry * b
5 * _ * _ * greg * a
6 * _ * _ * larry * b
7 * _ * _ * bob * a
8 * _ * _ * susan * a
9 * _ * _ * susan * a
10 * _ * _ * bob * a
11 * _ * _ * greg * a
... ... ... ... ...
我想使用交叉验证来调整模型,并且必须对数据集进行分层,以便每个折叠都包含少数类 b 的一些示例。问题是我有第二个约束,相同的 id 决不能出现在两个不同的折叠中,因为这会泄漏有关主题的信息。
我正在使用 python 的 scikit-learn 库。我需要一种结合了 LabelKFold 和 StratifiedKFold 的方法,它可以确保标签(id)不会在折叠之间拆分,它可以确保每个折叠都具有相似的类比率。如何使用 scikit-learn 完成上述任务?如果无法在 sklearn 中拆分两个约束,我该如何手动或使用其他 python 库有效地拆分数据集?
【问题讨论】:
标签: python pandas machine-learning scikit-learn cross-validation