python - sklearn 随机状态不是随机的

标签 python random scikit-learn cross-validation

我一直在研究 StratifiedKFold 中的随机状态变量在 sklearn 中,但它似乎不是随机的。我相信设置 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

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

最佳答案

来自链接文档

random_state : None, int or RandomState

When shuffle=True, pseudo-random number generator state used for shuffling. If None, use default numpy RNG for shuffling.

您没有在调用 StratifiedKFold 时设置 shuffle=True,因此 random_state 不会执行任何操作。

关于python - sklearn 随机状态不是随机的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44029465/

相关文章:

python - 单元测试的真正简单解释是什么?

python - 正则表达式 Python 在某个单词后添加字符

python - Python CSV 编写器正在将字母添加到每个元素的开头并出现编码问题

python - (urls.W005) URL 命名空间 'LnkIn' 不是唯一的。

javascript - JS(jQuery): Randomly trigger-click 2 table rows

python - 如何在numpy的范围内获得正态分布?

c++ - 从时间生成 'random' 数字?

python - cross_val_score 返回每个类的准确度

python-2.7 - 手动计算的 AIC 与 statsmodel AIC 不同

Python PolynomialFeatures 将数据转换为与原始数据不同的形状