2014-10-27 144 views
4

我試圖重現R的createDataPartition函數在python中的行爲。我有一個用布爾目標變量進行機器學習的數據集。我想在訓練集(60%)和測試集(40%)中分割我的數據集。等效於Python中的createDataPartition

如果我這樣做是完全隨機的,我的目標變量將無法在兩組之間正確分配。

我使用實現它在R:

inTrain <- createDataPartition(y=data$repeater, p=0.6, list=F) 
training <- data[inTrain,] 
testing <- data[-inTrain,] 

我怎麼可以這樣做在Python?

PS:我使用scikit-learn作爲我的機器學習lib和python熊貓。

回答

3

在scikit學習,你得到的工具train_test_split

from sklearn.cross_validation import train_test_split 
from sklearn import datasets 

# Use Age and Weight to predict a value for the food someone chooses 
X_train, X_test, y_train, y_test = train_test_split(table['Age', 'Weight'], 
                table['Food Choice'], 
                test_size=0.25) 

# Another example using the sklearn pre-loaded datasets: 
iris = datasets.load_iris() 
X_iris, y_iris = iris.data, iris.target 
X, y = X_iris[:, :2], y_iris 
X_train, X_test, y_train, y_test = train_test_split(X, y) 

這打破了以

  • 輸入的數據進行訓練
  • 輸入,用於評估數據
  • 輸出爲培訓數據
  • 輸出評估數據

。您還可以添加一個關鍵字參數:test_size = 0.25改變用於訓練的數據的百分比和測試

要拆分單一數據集,你可以使用這樣的呼籲得到40%的測試數據:

>>> data = np.arange(700).reshape((100, 7)) 
>>> training, testing = train_test_split(data, test_size=0.4) 
>>> print len(data) 
100 
>>> print len(training) 
60 
>>> print len(testing) 
40 
+1

這個函數是否理解它應該根據目標/標籤變量拆分數據?它不是寫在文檔中的任何地方。 – poiuytrez 2014-10-27 13:08:07

+0

我增加了另一個例子,您明確選擇變量和目標 – 2014-10-27 13:12:42

+0

...另一個隨機將輸入「數據」分成兩個數組 - 60:40 – 2014-10-27 13:23:00