Si je veux un train/test fractionné au hasard, j'utilise la fonction d'assistance Sklearn:
In [1]: from sklearn.model_selection import train_test_split
...: train_test_split([1,2,3,4,5,6])
...:
Out[1]: [[1, 6, 4, 2], [5, 3]]
Quel est le moyen le plus concis d’obtenir un train/test divisé en deux parties, c’est-à-dire.
[[1,2,3,4], [5,6]]
EDIT J'utilise actuellement
train, test = data[:int(len(data) * 0.75)], data[int(len(data) * 0.75):]
mais en espérant quelque chose d'un peu plus agréable. J'ai ouvert un numéro sur sklearn https://github.com/scikit-learn/scikit-learn/issues/8844
EDIT 2: Mon RP a été fusionné. Dans scikit-learn version 0.19, vous pouvez passer le paramètre shuffle=False
à train_test_split
pour obtenir un fractionnement non brassé.
J'ajoute peu à la réponse de Psidom, si ce n'est une fonction de copier-coller facile à copier:
def non_shuffling_train_test_split(X, y, test_size=0.2):
i = int((1 - test_size) * X.shape[0]) + 1
X_train, X_test = np.split(X, [i])
y_train, y_test = np.split(y, [i])
return X_train, X_test, y_train, y_test
Mise à jour: À un moment donné, cette fonctionnalité est devenue intégrée, vous pouvez donc faire:
from sklearn.model_selection import train_test_split
train_test_split(X, y, test_size=0.2, shuffle=False)
Utilisez numpy.split
:
import numpy as np
data = np.array([1,2,3,4,5,6])
np.split(data, [4]) # modify the index here to specify where to split the array
# [array([1, 2, 3, 4]), array([5, 6])]
Si vous souhaitez scinder un pourcentage, vous pouvez calculer l’indice de scission à partir de la forme de data :
data = np.array([1,2,3,4,5,6])
p = 0.6
idx = int(p * data.shape[0]) + 1 # since the percentage may end up to be a fractional
# number, modify this as you need, usually shouldn't
# affect much if data is large
np.split(data, [idx])
# [array([1, 2, 3, 4]), array([5, 6])]
Tout ce que vous avez à faire est de définir le paramètre shuffle sur False et de stratifier le paramètre sur None:
In [49]: train_test_split([1,2,3,4,5,6],shuffle = False, stratify = None)
Out[49]: [[1, 2, 3, 4], [5, 6]]