De garder la même variable muette dans la formation et de données de test
Je suis la construction d'un modèle de prédiction en python, avec deux de formation et d'ensembles de test. La formation contient des données numériques de type variable catégorique, par exemple, le code postal,[91521,23151,12355, ...], et aussi de la chaîne de variables catégorielles, par exemple, la ville de ['Chicago', 'New York', 'Los Angeles', ...].
Pour former les données, j'ai d'abord utiliser la mp.get_dummies' pour obtenir la variable muette de ces variables, puis l'ajustement du modèle avec la transformation des données d'entraînement.
Je fais la même transformation sur mes données de test et de prédire le résultat en utilisant le modèle appris. Cependant, j'ai eu l'erreur 'ValueError: Nombre de caractéristiques du modèle doit correspondre à l'entrée. Modèle n_features est 1487 et entrée n_features est de 1345 '. La raison en est parce qu'il y a moins de variables muettes dans les données de test, car il a moins de "ville" et "code postal".
Comment puis-je résoudre ce problème? Par exemple, 'OneHotEncoder" ne codent tous type numérique variable catégorique. 'DictVectorizer()' ne codent tous type de chaîne variable catégorique. J'ai effectuer une recherche en ligne et de voir un peu des questions similaires, mais aucun d'entre eux aborde vraiment à ma question.
La manipulation catégorique fonctionnalités à l'aide de scikit-learn
https://www.quora.com/What-is-the-best-way-to-do-a-binary-one-hot-one-of-K-coding-in-Python
Vous devez vous connecter pour publier un commentaire.
Vous pouvez aussi faire les colonnes manquantes et les ajouter à l'ensemble de données de test:
Ce code doit aussi s'assurer que la colonne résultant de la catégorie dans l'ensemble de données de test, mais n'est pas présent dans l'ensemble de données d'apprentissage sera supprimé
train, test = train.align(test, axis=1)
Supposons que vous disposez des fonctionnalités identiques, les noms en train et de l'ensemble de données de test. Vous pouvez générer concaténées ensemble de données sur la formation et le test, obtenir les nuls de concaténées dataset et diviser la formation et le test de retour.
Vous pouvez le faire de cette façon:
En conséquence, vous avez le même nombre de fonctionnalités pour le train et l'ensemble de données de test.
train2 et test2 ont les mêmes colonnes. Fill_value indique la valeur à utiliser pour les colonnes manquantes.
C'est plutôt une vieille question, mais si vous visez à l'aide de scikit learn API, vous pouvez utiliser les éléments suivants DummyEncoder classe: https://gist.github.com/psinger/ef4592492dc8edf101130f0bf32f5ff9
Ce qu'il fait est qu'il utilise la catégorie dtype de spécifier les nuls pour créer également élaboré ici: Mannequin de création dans les conduites à différents niveaux dans la formation et le test set