Quelle est la bonne façon de diviser un tableau NumPy de façon aléatoire en deux ensembles de données : formation et test/validation ? Quelque chose de similaire à la méthode cvpartition
o crossvalind
dans Matlab.
Réponses
Trop de publicités?Il est probable que vous devrez non seulement séparer les données d'entraînement et de test, mais aussi procéder à une validation croisée pour vous assurer que votre modèle se généralise. Ici, je suppose 70% de données de formation, 20% de validation et 10% de données d'attente/de test.
Consultez le np.split :
Si indices_ou_sections est un tableau 1-D d'entiers triés, les entrées indiquent où le tableau est divisé le long de l'axe. indiquent où le tableau est divisé le long de l'axe. Par exemple, [2, 3] donnerait, pour axe=0, le résultat suivant
ary[:2] ary[2:3] ary[3 :]
t, v, h = np.split(df.sample(frac=1, random_state=1), [int(0.7*len(df)), int(0.9*len(df))])
Je suis conscient que ma solution n'est pas la meilleure, mais elle s'avère pratique lorsque vous souhaitez diviser des données de manière simpliste, notamment lorsque vous enseignez la science des données à des débutants !
def simple_split(descriptors, targets):
testX_indices = [i for i in range(descriptors.shape[0]) if i % 4 == 0]
validX_indices = [i for i in range(descriptors.shape[0]) if i % 4 == 1]
trainX_indices = [i for i in range(descriptors.shape[0]) if i % 4 >= 2]
TrainX = descriptors[trainX_indices, :]
ValidX = descriptors[validX_indices, :]
TestX = descriptors[testX_indices, :]
TrainY = targets[trainX_indices]
ValidY = targets[validX_indices]
TestY = targets[testX_indices]
return TrainX, ValidX, TestX, TrainY, ValidY, TestY
Selon ce code, les données seront divisées en trois parties - 1/4 pour la partie test, un autre 1/4 pour la partie validation, et 2/4 pour l'ensemble d'entraînement.
- Réponses précédentes
- Plus de réponses