【发布时间】:2020-08-03 20:03:30
【问题描述】:
我有一个样本数据如下:
import pandas as pd
df = pd.DataFrame({"x": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120],
"id": [1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5],
"label": ["a", "a", "a", "b", "a", "b", "b", "b", "a", "b", "a", "b"]})
所以我的数据看起来像这样
x id label
10 1 a
20 1 a
30 1 a
40 1 b
50 2 a
60 2 b
70 3 a
80 3 a
90 4 b
100 4 a
110 5 b
120 5 a
在给定测试样本数量(例如 6 个样本)的情况下,我想根据标签分布将此数据分成两组(训练、测试)。我的设置更喜欢将测试集的大小定义为表示测试样本数量而不是百分比的整数。但是,对于我的特定域,任何 id 必须只分配在一个组中。例如,如果将 id 1 分配给训练集,则其他 id 为 1 的样本不能分配给测试集。所以预期的输出是 2 个数据帧,如下所示:
训练集
x id label
10 1 a
20 1 a
30 1 a
40 1 b
50 2 a
60 2 b
测试集
x id label
70 3 a
80 3 a
90 4 b
100 4 a
110 5 b
120 5 a
训练集和测试集具有相同的类分布(a:b 为 4:2),id 1、2 仅分配给训练集,而 id 3、4、5 仅分配给测试集。我曾经使用 sklearn train_test_split,但我不知道如何在这种情况下应用它。我可以就如何处理这种情况提出您的建议吗?
【问题讨论】:
-
我想到的唯一方法是通过 id 拆分训练/测试(将唯一的 id 拆分为 2 组),但这可能不会产生所需的数据拆分百分比,这本来就可以从我所看到的情况来看,无法解决这个问题。
标签: python pandas machine-learning scikit-learn