首页 文章

来自Scikit-learn的train_test_split()的行为

提问于
浏览
0

我很好奇Scikit-learn的train_test_split()方法在以下场景中的表现如何:

一个虚构的数据集:

id, count, size
1, 4, 8
2, 5, 9
3, 6, 0

说我会将它分成两个独立的集合(两者都保持'id'):

id, count      |       id, size
1, 4           |       1, 8
2, 5           |       2, 9
3, 6           |       3, 0

并使用 train_test_split() 将它们与 random_state 分开 random_state . order 两者是否相同 with 'id' as reference ? (因为你正在改组相同的数据集,但遗漏了不同的部分)

我很好奇它是如何工作的,因为我有两个模型 . 第一个用数据集训练并将其结果添加到数据集,然后将其中一部分用于训练第二个模型 .

在执行此操作时,重要的是在测试第二个模型的推广时,不使用任何数据点,这些数据点也用于训练第一个模型 . 这是因为数据是'seen before'并且模型将知道如何处理它,因此您不再测试对新数据的推广 .

如果 train_test_split() 将其改变,那将是很好的,因为那时人们不需要跟踪用于训练第一算法的数据以防止测试结果的污染 .

1 回答

  • 3

    如果在每次调用中使用相同的random_state参数,它们应具有相同的结果索引 .

    但是 - 您也可以撤消您的操作顺序 . 在父数据集上调用测试/训练拆分,然后从测试和训练集中创建两个子集 .

    例:

    print(df)
       id  count  size
    0   1      4     8
    1   2      5     9
    2   3      6     0
    
    from sklearn.model_selection import train_test_split
    dfa = df[['id', 'count']].copy()
    dfb = df[['id', 'size']].copy()
    rstate = 123
    traina, testa = train_test_split(dfa, random_state=123)
    trainb, testb = train_test_split(dfb, random_state=123)
    assert traina.index.equals(trainb.index)
    # True
    

相关问题