train_test_split 将数组或矩阵拆分为随机的训练和测试子集。 这意味着每次在不指定 random_state 的情况下运行它时,都会得到不同的结果,这是预期的行为。 例如:
Run 1:
>>> a, b = np.arange(10).reshape((5, 2)), range(5)
>>> train_test_split(a, b)
[array([[6, 7],
[8, 9],
[4, 5]]),
array([[2, 3],
[0, 1]]), [3, 4, 2], [1, 0]]
Run 2:
>>> train_test_split(a, b)
[array([[8, 9],
[4, 5],
[0, 1]]),
array([[6, 7],
[2, 3]]), [4, 2, 0], [3, 1]]
在不设定random_state时候,每次split的内容都会改变。 另一方面,如果使用 random_state=some_number,那么可以保证 Run 1 的输出将等于 Run 2 的输出,即拆分将始终相同。 实际的 random_state 数字是 42、0、21 并不重要,重要的是每次使用 42 时,每次进行拆分时总是会得到和第一次相同的输出。 如果你想要可重现的结果(例如在文档中),这将非常有用,这样每个人在运行示例时都可以始终如一地看到相同的数字。 在实践中,一般建议应该在测试内容时将 random_state 设置为某个固定数字,但是如果确实需要随机(而不是固定)拆分,则在实际生产中将其删除。