2017-05-17 3 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, 내가 마지막 값을 저장하는 : random_state=4에 대해 동일한 절차를 수행

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]) 

을 :

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는 아무 것도하지 않습니다.