我有以下数据:
Group_ID Item_id Target0 1 1 01 1 2 02 1 3 13 2 4 04 2 5 15 2 6 16 3 7 07 4 8 08 5 9 09 5 10 1
我需要根据“Group_ID”将数据集分割成训练集和测试集,使80%的数据进入训练集,20%的数据进入测试集。
也就是说,我的训练集应该看起来像这样:
Group_ID Item_id Target0 1 1 01 1 2 02 1 3 13 2 4 04 2 5 15 2 6 16 3 7 07 4 8 0
而测试集应该看起来像这样:
Group_ID Item_id Target8 5 9 09 5 10 1
有什么最简单的方法可以做到这一点吗?据我所知,sklearn中的标准test_train_split
函数不支持按组分割,并且无法指定分割比例(例如80/20)。
回答:
我找到了答案。这似乎有效:
from sklearn.model_selection import GroupShuffleSplit splitter = GroupShuffleSplit(test_size=.20, n_splits=2, random_state = 7)split = splitter.split(df, groups=df['Group_Id'])train_inds, test_inds = next(split)train = df.iloc[train_inds]test = df.iloc[test_inds]