Scikit-learn 中 train_test_split() 的行为
Behaviour of train_test_split() from Scikit-learn
我很好奇 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()
和 0
的相同 random_state
将它们分开。两者的顺序是否与和'id'相同? (因为您正在改组相同的数据集但遗漏了不同的部分)
我很好奇它是如何工作的,因为我有两个模型。第一个使用数据集进行训练并将其结果添加到数据集中,然后使用其中的一部分来训练第二个模型。
执行此操作时,重要的是在测试第二个模型的泛化时,不使用也用于训练第一个模型[的数据点] =38=]。这是因为数据是 'seen before' 并且模型会知道如何处理它,所以您不再测试对新数据的泛化。
如果 train_test_split()
能以同样的方式对其进行洗牌,那就太好了,因为那时人们就不需要跟踪用于训练第一个算法的数据,以防止测试结果受到污染。
如果您在每次调用中使用相同的 random_state
参数,它们应该具有相同的结果索引。
但是--您也可以只颠倒操作顺序。在父数据集上调用 test/train split,然后从生成的测试集和训练集创建两个子集。
示例:
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
我很好奇 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()
和 0
的相同 random_state
将它们分开。两者的顺序是否与和'id'相同? (因为您正在改组相同的数据集但遗漏了不同的部分)
我很好奇它是如何工作的,因为我有两个模型。第一个使用数据集进行训练并将其结果添加到数据集中,然后使用其中的一部分来训练第二个模型。
执行此操作时,重要的是在测试第二个模型的泛化时,不使用也用于训练第一个模型[的数据点] =38=]。这是因为数据是 'seen before' 并且模型会知道如何处理它,所以您不再测试对新数据的泛化。
如果 train_test_split()
能以同样的方式对其进行洗牌,那就太好了,因为那时人们就不需要跟踪用于训练第一个算法的数据,以防止测试结果受到污染。
如果您在每次调用中使用相同的 random_state
参数,它们应该具有相同的结果索引。
但是--您也可以只颠倒操作顺序。在父数据集上调用 test/train split,然后从生成的测试集和训练集创建两个子集。
示例:
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