J'ai un fichier CSV assez volumineux contenant des données de révision Amazon que j'ai lues dans une trame de données pandas. Je veux diviser les données 80-20 (train-test) mais en le faisant, je veux s'assurer que les données fractionnées représentent proportionnellement les valeurs d'une colonne (Catégories), c'est-à-dire que toutes les différentes catégories de revues sont présentes à la fois dans les données de train et de test proportionnellement.
Les données ressemblent à ceci:
**ReviewerID** **ReviewText** **Categories** **ProductId**
1212 good product Mobile 14444425
1233 will buy again drugs 324532
5432 not recomended dvd 789654123
J'utilise le code suivant pour ce faire:
import pandas as pd
Meta = pd.read_csv('C:\\Users\\xyz\\Desktop\\WM Project\\Joined.csv')
import numpy as np
from sklearn.cross_validation import train_test_split
train, test = train_test_split(Meta.categories, test_size = 0.2, stratify=y)
cela donne l'erreur suivante
NameError: name 'y' is not defined
Comme je suis relativement nouveau à python je ne peux pas comprendre ce que je fais mal ou si ce code va stratifier en fonction des catégories de colonnes. Il semble fonctionner correctement lorsque je supprime l'option stratifier comme ainsi que la colonne des catégories de la répartition des tests de train.
Toute aide serait appréciée.
>>> import pandas as pd
>>> Meta = pd.read_csv('C:\\Users\\*****\\Downloads\\so\\Book1.csv')
>>> import numpy as np
>>> from sklearn.model_selection import train_test_split
>>> y = Meta.pop('Categories')
>>> Meta
ReviewerID ReviewText ProductId
0 1212 good product 14444425
1 1233 will buy again 324532
2 5432 not recomended 789654123
>>> y
0 Mobile
1 drugs
2 dvd
Name: Categories, dtype: object
>>> X = Meta
>>> X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42, stratify=y)
>>> X_test
ReviewerID ReviewText ProductId
0 1212 good product 14444425
sklearn.model_selection.train_test_split
stratifier: semblable à un tableau ou Aucun (la valeur par défaut est Aucun)
Si ce n'est pas le cas, les données sont divisées de manière stratifiée, en utilisant ceci comme étiquettes de classe.
Le long de la documentation de l'API, je pense que vous devez essayer comme X_train, X_test, y_train, y_test = train_test_split(Meta_X, Meta_Y, test_size = 0.2, stratify=Meta_Y)
.
Meta_X
, Meta_Y
devrait être attribué correctement par vous (je pense que Meta_Y
devrait être Meta.categories
en fonction de votre code).