为什么随机种子不会使Python中的结果保持不变

时间:2017-10-10 07:57:01

标签: python-2.7 random seed

我使用以下代码。我希望得到相同随机种子的相同结果。我使用相同的随机种子(在这种情况下为1)并得到不同的结果。 这是代码:

<?php

$holidayDates = [
    '10-10-2017', 
    '11-10-2017',
];

$foundCounter = 0;

$theDate = strtotime("9-10-2017"); 

while ($foundCounter < 1) {

    $theDate = strtotime('+1 weekday', $theDate);

    if (!in_array(date('d-m-Y', $theDate), $holidayDates)) {
        $foundCounter++;
    }

} 

$newDater = date("d-m-Y", $theDate);
var_dump($newDater);
// string(10) "12-10-2017"

1 个答案:

答案 0 :(得分:3)

您的代码:

import numpy as np
from random import seed
seed(1) ### <-----

设置python&#39; s random-class的随机种子。

但sklearn完全基于numpy&#39; random classexplained here

  

对于测试和可复制性,对于具有随机化组件的算法中使用的伪随机数生成器,通过单个种子控制整个执行通常很重要。 Scikit-learn不使用自己的全局随机状态;只要没有提供RandomState实例或整数随机种子作为参数,它就依赖于numpy全局随机状态,可以使用numpy.random.seed进行设置。例如,要将执行的numpy全局随机状态设置为42,可以在他或她的脚本中执行以下操作:

     

import numpy as np

     

np.random.seed(42)

所以一般来说你应该这样做:

np.random.seed(1)

但这只是事实的一部分,因为在小心使用所有sklearn组件时,通常不需要这些组件,明确地用一些种子调用它们!

ShreyasG 一样,这也适用于train_test_split