Scikit 学习火车测试拆分,无需混合参与者

数据挖掘 机器学习
2022-01-20 13:25:47

我有轨迹数据集。有 90 名参与者出现在每条 90 条路径中。所以总共有450条小径。

我希望拆分我的数据集,这样参与者就不会在训练和测试集上混为一谈。我想要训练集中 25 名参与者的所有轨迹,以及测试集中剩余 25 名参与者的轨迹。

原因是我想测试完全看不见的数据以访问过度拟合。有没有办法在 scikit-learn 中实现这一点?

2个回答

您可以将 scikit-learn 的选项之一用于分组数据特别是,GroupKFold应该做的伎俩:像

from sklearn.model_selection import GroupKFold
group_kfold = GroupKFold(n_splits=2)
group_kfold.get_n_splits(X, y, groups)

其中groups是一组组索引。

id_split = random.sample(range(50),25)
id_split.sort()

blinddata_train = pd.DataFrame()
blinddata_test = pd.DataFrame()
blindtarget_train = pd.DataFrame()
blindtarget_test = pd.DataFrame()

for i in range(50):
    if i in train_split:
#         print("Training: ", (i+1))
        blinddata_train=blinddata_train.append(data[(90*i):(90*i+89)])
        blindtarget_train=blindtarget_train.append(target[(90*i):(90*i+89)])
    else:
#         print("Testing: ", (i+1))
        blinddata_test=blinddata_test.append(data[(90*i):(90*i+89)])
        blinddtarget_test=blindtarget_test.append(target[(90*i):(90*i+89)])

我刚刚写了一个简短的简介,从 50 名参与者中随机选择 25 名参与者。数据已经被排序为连续来自每个参与者的 90 次试验(来自 ID1 的 90 次试验,然后来自 ID2 的 90 次试验等)。所以我只是根据它是在测试中还是在火车拆分中附加到火车或测试中。