sklearn的train_test_split中的random_state参数

时间:2018-10-20 18:34:43

标签: python scikit-learn data-science

随机状态的不同值对输出有什么不同?例如,如果我设置为0,而我设置为100,则对输出有什么影响?

2 个答案:

答案 0 :(得分:1)

docs

  

random_state是随机数生成器使用的种子。

通常,使用种子来创建可重现的输出。对于train_test_splitrandom_state决定如何拆分数据集。 除非要创建可重现的运行,否则可以跳过此参数。

  

例如,如果设置为0,而我设置为100,那会有什么不同   制作输出?

对于特定种子,您将始终获得相同的训练/测试成绩。不同的种子将导致不同的训练/测试拆分。

答案 1 :(得分:0)

将不同的整数传递到random_state会为NumPy的伪随机数生成器提供这些值和makes the resulting "random" train and test data reproducible。这意味着,如果将函数数组arandom_seed=0一起传递,则使用0种子值将始终得到相同的训练数据和测试数据。

当您传递整数时,该值最终会传递给scklearn.utils.check_random_state(),它变为:

if isinstance(seed, (numbers.Integral, np.integer)):
    return np.random.RandomState(seed)

ShuffleSplit之类的类依次使用它来调用随机排列:

rng = check_random_state(self.random_state)
for i in range(self.n_splits):
    # random partition
    permutation = rng.permutation(n_samples)
    ind_test = permutation[:n_test]
    ind_train = permutation[n_test:(n_test + n_train)]
    yield ind_train, ind_test

以下是使用实际方法的示例:

>>> np.random.RandomState(0).permutation([1, 4, 9, 12, 15])
array([ 9,  1,  4, 12, 15])
>>> np.random.RandomState(0).permutation([1, 4, 9, 12, 15])
array([ 9,  1,  4, 12, 15])
>>> np.random.RandomState(0).permutation([1, 4, 9, 12, 15])
array([ 9,  1,  4, 12, 15])
>>> np.random.RandomState(100).permutation([1, 4, 9, 12, 15])
array([ 4,  9, 12, 15,  1])
>>> np.random.RandomState(100).permutation([1, 4, 9, 12, 15])
array([ 4,  9, 12, 15,  1])
>>> np.random.RandomState(100).permutation([1, 4, 9, 12, 15])
array([ 4,  9, 12, 15,  1])