2017-03-07 90 views
0

我有两个数据集:X和y。我想将它们分成训练集和测试集。我想保留他们的数据序列(不随机洗牌)。以下面的代码为例。 X有10行(y是相同的)。我想要的结果是X_train约占总行数的2/3,而x_test约占总行数的1/3。最重要的是,X_train不应该只是0到6行,而应该从0到9尽可能均匀地选择行。这同样适用于X_test。Python3,分布式数据集均匀分布,无需洗牌

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