sklearn随机状态不是真正的随机

4

我一直在尝试使用sklearn中的StratifiedKFold函数中的随机状态变量,但它似乎并不是真正的随机。我相信设置random_state=5应该会给我一个不同的测试集,而不是设置random_state=4,但事实并非如此。下面是我创建的一些简单可复现的代码。首先,我加载我的数据:

import numpy as np
from sklearn.cross_validation import StratifiedKFold
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target

然后我设置了random_state=5,并储存了最终结果:

skf=StratifiedKFold(n_splits=5,random_state=5)
for (train, test) in skf.split(X,y): full_test_1=test
full_test_1

array([ 40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  90,  91,  92,
        93,  94,  95,  96,  97,  98,  99, 140, 141, 142, 143, 144, 145,
       146, 147, 148, 149])

对于random_state=4,执行相同的过程:

skf=StratifiedKFold(n_splits=5,random_state=4)
for (train, test) in skf.split(X,y): full_test_2=test
full_test_2

array([ 40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  90,  91,  92,
        93,  94,  95,  96,  97,  98,  99, 140, 141, 142, 143, 144, 145,
       146, 147, 148, 149])

我可以检查它们是否相等:

np.array_equal(full_test_1,full_test_2)
True

我认为两个随机状态不应该返回相同的数字。我的逻辑或代码有缺陷吗?

1个回答

4

从链接的文档中得知

随机状态:无、整数或RandomState

当shuffle=True时,用于洗牌的伪随机数生成器状态。如果为None,则使用默认的numpy RNG进行洗牌。

在您调用StratifiedKFold时未设置shuffle=True,因此random_state不起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接