Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为scikit学习的随机数生成器设定种子?_Python_Numpy_Random_Scikit Learn_Random Seed - Fatal编程技术网

Python 如何为scikit学习的随机数生成器设定种子?

Python 如何为scikit学习的随机数生成器设定种子?,python,numpy,random,scikit-learn,random-seed,Python,Numpy,Random,Scikit Learn,Random Seed,我正在尝试为我的一些代码编写一个使用scikit learn的单元测试。然而,我的单元测试似乎是不确定的 好了,在我的代码中,scikit learn使用随机性的地方只有它的LogisticRegression模型和它的train\u test\u split,因此我有以下几点: RANDOM_SEED = 5 self.lr = LogisticRegression(random_state=RANDOM_SEED) X_train, X_test, y_train, test_labels

我正在尝试为我的一些代码编写一个使用scikit learn的单元测试。然而,我的单元测试似乎是不确定的

好了,在我的代码中,scikit learn使用随机性的地方只有它的
LogisticRegression
模型和它的
train\u test\u split
,因此我有以下几点:

RANDOM_SEED = 5
self.lr = LogisticRegression(random_state=RANDOM_SEED)
X_train, X_test, y_train, test_labels = train_test_split(docs, labels, test_size=TEST_SET_PROPORTION, random_state=RANDOM_SEED)
但这似乎不起作用——即使我传递一个固定的
文档
和一个固定的
标签
,固定验证集上的预测概率也会因运行而异

我还尝试在代码顶部添加一个
numpy.random.seed(random\u seed)
调用,但这似乎也不起作用

我有什么遗漏吗?有没有一种方法可以在一个地方将种子传递给scikit learn,以便在scikit learn的所有调用中都使用种子

from sklearn import datasets, linear_model
iris = datasets.load_iris()
(X, y) = iris.data, iris.target
RANDOM_SEED = 5
lr = linear_model.LogisticRegression(random_state=RANDOM_SEED)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=RANDOM_SEED)
lr.fit(X_train, y_train)
lr.score(X_test, y_test)
现在已经制作了几次
0.933335
。你这样做似乎还可以。另一种方法是记录或使用随机性。使用
random_state
是什么:

如果您的代码依赖于随机数生成器,则它不应使用诸如
numpy.random.random
numpy.random.normal
之类的函数。这种方法可能导致单元测试中的重复性问题。相反,应该使用
numpy.random.RandomState
对象,该对象是从传递给类或函数的
random\u state
参数构建的


您的代码中很可能还有其他错误!在LR和spliting中使用种子就足以确保它的行为是确定性的!我不确定它是否能解决你的决定论问题,但这不是在
scikit-learn
中使用固定种子的正确方法。实例化一个
prng=numpy.random.RandomState(random\u SEED)
实例,然后将其作为
random\u state=prng
传递给每个单独的函数。如果您只是传递
RANDOM\u SEED
,每个单独的函数将重新启动,并在不同的位置给出相同的数字,从而导致不好的相关性。@RobertKern您能详细说明一下吗?我不太明白你想解释什么。当然,使用int种子是使这些函数具有确定性的有效方法。也许你说的是分布式播种的问题,但即使是这样,我也不明白这是从哪里来的,还有更好的方法。决定论不是唯一重要的东西。统计独立性也很重要,通过将同一个整数种子传递给同一管道中的多个
scikit learn
函数,您无法实现这一点。您只希望管道中的所有函数共享一个
RandomState
实例。@RobertKern,这取决于环境/任务(当然还有PRNG),但不适用于OP的问题。