2017-03-07 67 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