2017-03-07 1 views
0

두 개의 데이터 세트 X와 y가 있습니다. 훈련 세트와 테스트 세트로 나누고 싶습니다. 그리고 나는 데이터의 순서를 유지하고 싶다. (랜덤 셔플 없음). 예를 들어, 다음과 같은 코드를 가져 가라. X는 10 행 (y는 동일)입니다. 내가 원하는 결과는 X_train이 전체 행의 2/3을 차지하고 x_test가 전체 행의 1/3을 차지한다는 것입니다. 그리고 가장 중요한 것은 X_train은 0에서 6까지의 행이 아니라 가능한 한 0에서 9까지의 행을 선택해야합니다. X_test에도 동일하게 적용됩니다.파이썬 3, 균등 분포의 분할 데이터 세트, 셔플없이

import numpy as np 
X = np.arange(50).reshape(10,5) 
y = np.arange(10) 

test_size = 0.33 
n_total = X.shape[0] # total number of rows 
n_train = int(test_size*n_total) 

# The following is bad example, since X_train picks rows from 0 to 6. 
X_train, X_test = X[:n_train], X_test[n_train:] 

# Wanted result: X_train and X_test are distributed across the total rows, as evenly as possible. 
X_train = X[0], X[2], X[3], X[4], X[6], X[7], X[8] 
X_test = X[1], X[5], X[9] 

도와 주실 수 있습니까? 감사합니다

답변

0

당신은 10의 순열을 만들고 그것을 색인으로 사용하고 열차의 첫 번째 n과 테스트를위한 나머지를 선택할 수 있습니다. 엄밀히 말하면 데이터를 섞지는 않았지만 인덱스를 섞은 것입니다. 잘하면 그게 당신의 문제를 해결합니다.

np.random.permutation(10) 
+0

답장을 보내 주셔서 감사합니다. 그러나 그것은 내 문제를 완전히 해결하지 못합니다. 테스트 데이터 세트가 고르게 분산되기를 바랍니다. 당신의 제안으로 저는'[6, 8, 7, 0, 4, 9, 1, 5, 2, 3]'을 얻을 수 있습니다. 그런 다음 마지막 세 요소를 선택하면 테스트 세트 '[5, 2, 3]'이됩니다. 이 세 가지 값은 모두 0과 5 사이이며 균등하게 분배되지 않습니다. 하나의 이상적인 결과는'[1, 5, 9]'입니다. – aura