Ho un problema di classificazione a più classi e il mio set di dati è distorto, ho 100 istanze di una particolare classe e dico 10 di una classe diversa, quindi voglio dividere il mio set di dati mantenendo il rapporto tra classi, se ho 100 istanze di un particolare classe e voglio il 30% dei record per andare nel set di allenamento Voglio avere lì 30 istanze della mia classe rappresentata da 100 record e 3 istanze della mia 10 classe rappresentata da record e così via.come dividere un set di dati in allenamento e rapporto di mantenimento del set di validazione tra le classi?
risposta
È possibile utilizzare di sklearn StratifiedKFold
, dalla documentazione on-line:
stratificato K-Folds convalida incrociata iteratore
Fornisce treno/test indici di dividere i dati in set di test dei treni.
Questo oggetto di convalida incrociata è una variante di KFold che restituisce pieghe stratificate. Le pieghe sono realizzate mantenendo la percentuale di campioni per ogni classe.
>>> from sklearn import cross_validation
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([0, 0, 1, 1])
>>> skf = cross_validation.StratifiedKFold(y, n_folds=2)
>>> len(skf)
2
>>> print(skf)
sklearn.cross_validation.StratifiedKFold(labels=[0 0 1 1], n_folds=2,
shuffle=False, random_state=None)
>>> for train_index, test_index in skf:
... print("TRAIN:", train_index, "TEST:", test_index)
... X_train, X_test = X[train_index], X[test_index]
... y_train, y_test = y[train_index], y[test_index]
TRAIN: [1 3] TEST: [0 2]
TRAIN: [0 2] TEST: [1 3]
Ciò manterrà i vostri rapporti di classe in modo che le spaccature mantengono i rapporti di classe, questo funzionerà bene con panda DFS.
Come suggerito da @Ali_m si potrebbe usare StratifiedShuffledSplit
che accetta un rapporto di divisione param:
sss = StratifiedShuffleSplit(y, 3, test_size=0.7, random_state=0)
produrrebbe una scissione del 70%.
You can simply use the following:
Ma fare in modo che si reimposta stratificare da Nessuno alle etichette di classe:
"stratificare: array simile o Nessuno (di default è None) caso contrario No, i dati è diviso in un moda stratificata, usando questo come etichette di classe. "
Aggiungere un esempio contestuale minimale (come usarlo) renderebbe questa risposta migliore . Cerca anche di evitare il collegamento esternamente, senza spiegare in modo sufficientemente dettagliato, a cosa stai collegando. –
Semplice come:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
stratify=y,
test_size=0.25)
- 1. Come dividere i dati sul set di allenamento bilanciato e sul set di test su sklearn
- 2. Dividere un set (C++)
- 3. Mantenimento di una relazione a due vie tra le classi
- 4. Come convertire un set di dati Scikit-learn in un set di dati di Pandas?
- 5. Mano taggare un set di allenamento con tag personalizzati
- 6. Riga che associa un set di set di dati?
- 7. Set di dati Truth and training
- 8. Come dividere un set di file in Ant in più set
- 9. Set di dati del genere musicale GTZAN
- 10. Differenza tra set-cookie2 e set-cookie
- 11. Determinare "wiggliness" del set di dati - Python
- 12. set di caratteri tra PHP e MySQL
- 13. Ridimensionamento della finestra di Libgdx: mantenimento del rapporto di aspetto
- 14. estrazione prima e ultima posizione in un set di dati
- 15. Creazione di set di dati a intervallo fisso da set di dati casuali con dati obsoleti
- 16. Differenza tra set, \ set e \ pset in psql
- 17. Condivisione del set di dati tra report padre e sottoreport nei report Crystal 2008?
- 18. SQLite Android e set di dati enormi
- 19. Set di dati knn large
- 20. Come visualizzare i set di dati pubblici?
- 21. Formazione di registrazione e perdita di validazione in tensore
- 22. Come convertire un datatable in un set di dati correlato
- 23. RecyclerView cambia set di dati
- 24. Come trasporre un set di dati in un file csv?
- 25. C#, Ciclo continuo attraverso il set di dati e mostra ogni record da una colonna del set di dati
- 26. Leggi big treno/validazione/set di dati di test in tensorflow
- 27. Come aggiungere un'intestazione a un set di dati in R?
- 28. jquery set di dati attr
- 29. Discesa gradiente: eseguiamo iterazioni su TUTTO il set di allenamento con ogni passo in GD? oppure Cambiamo GD per ogni set di allenamento?
- 30. Ricerca di valori anomali in un set di dati
come faccio diviso 70/30 con la tecnica kFold? – JackNova
potresti usare ['StratifiedShuffleSplit'] (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.StratifiedShuffleSplit.html#sklearn.cross_validation.StratifiedShuffleSplit) per la divisione senza numero intero –
@EdChum fa questo lavoro anche per il problema di classificazione delle serie temporali multi-classe? – tilaprimera