2017-05-17 92 views
1

我一直在玩sklearn中的StratifiedKFold随机状态变量,但它似乎并不随机。我相信设置random_state=5,应该给我一个不同的测试集,然后设置random_state=4,但这似乎并非如此。我在下面创建了一些原始可重现的代码。首先我打开我的数据:sklearn随机状态不随机

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

从链接的文档

random_state:无,int或RandomState

当用于改组洗牌=真,伪随机数发生器的状态。如果没有,则使用默认numpy RNG进行混洗。

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