Tout nouveau nouveau à Scikit et en algèbre linéaire / apprentissage de la machine avec python en général, je ne peux donc pas sembler résoudre ce qui suit:
J'ai un ensemble de formation et un ensemble de données contenant à la fois continue et discrète / valeurs catégoriques. Les fichiers CSV sont chargés en dataframes de pandas et correspondent à la forme, étant (1460,81) et (1459,81).
Cependant, après avoir utilisé Get_D_Dummies , les formes de Les DataFrames changent de (1460, 306) et (1459, 294). Donc, lorsque je fais une régression linéaire avec le Scikit Linéaire Regression A > Module, il construit un modèle pour 306 variables et il essaie de prédire l'une avec seulement 294 avec elle. Ceci alors, naturellement, conduit à l'erreur suivante: p> Comment pourrais-je aborder un tel problème? Puis-je remodeler en quelque sorte le (1459, 294) pour correspondre à l'autre? P> Merci et j'espère que je me suis fait clairement :) p> p>
3 Réponses :
Il s'agit d'un problème extrêmement courant lorsqu'il s'agit de données catégoriques. Il existe des opinions différentes sur la meilleure façon de gérer cela.
Une approche possible consiste à appliquer une fonction aux caractéristiques catégoriques qui limitant l'ensemble des options possibles. Par exemple, si votre fonctionnalité contenait les lettres de l'alphabet, vous pouvez encoder des fonctions pour A, B, C, D et "Autre / Inconnu". De cette manière, vous pouvez appliquer la même fonction au moment de l'essai et en résumé de la question. Bien sûr, c'est que, en réduisant ainsi l'espace des fonctionnalités, vous risquez de perdre des informations significatives. P>
Une autre approche consiste à créer un modèle sur vos données de formation, lesquelles les mannequins sont naturellement créés et traitent que la ligne de base pour votre modèle. Lorsque vous prédisez avec le modèle au moment de l'essai, vous transformez vos données de test de la même manière que vos données de formation sont transformées. Par exemple, si votre jeu d'entraînement avait les lettres de l'alphabet dans une fonctionnalité, et la même fonctionnalité de l'ensemble de tests contenait une valeur de 'AA', vous ignorez cela pour faire une prédiction. C'est l'inverse de votre situation actuelle, mais la prémisse est la même. Vous devez créer les fonctionnalités manquantes à la volée. Cette approche a également des effectifs, bien sûr. P>
La deuxième approche est ce que vous mentionnez dans votre question, donc je vais y passer avec En utilisant Ceci codera les données de test dans De la même manière que vos données de formation, remplissez 0 pour les fonctionnalités nominales qui n'étaient pas créées en codant sur les données de test, mais ont été créées lors du processus de formation. P> Vous pouvez simplement envelopper cela dans une fonction, et Appliquez-le à vos données de test à la volée. Vous n'avez pas besoin des données d'entraînement codées en mémoire (que j'accède avec pandas code>. P>
get_dummies code> Vous encodez les fonctionnalités catégoriques en plusieurs fonctionnalités codées à une fois. Ce que vous pouvez faire est de forcer vos données de test pour correspondre à vos données de formation en utilisant
reindex code>, comme celui-ci: p>
formation_columns code>) Si vous créez une matrice ou une liste des noms de colonne. P> P>
Pour toute personne intéressée: j'ai fini par fusionner le train et le test de test, puis générant les mannequins, puis divisez les données à nouveau à la même fraction. De cette façon, il n'y avait plus de problème avec différentes formes, comme il a généré exactement les mêmes données factices. P>
J'ai découvert que, je créais un modèle utilisant des variables Bien que cette variable inutile, mais cela résout tout le problème. P> P>
Initialement, je recevais ce message d'erreur:
x_train = sm.add_constant (x_train) code> la variable constante est automatiquement créée. Donc, au total, il y a maintenant
Et lorsque vous testez ce modèle par défaut, la variable de test a 3 fort> variables. Ainsi, l'erreur se déclenche pour la correspondance de la dimension Miss.
Donc, j'ai utilisé l'astuce qui crée une variable factice pour Y_TEST aussi. p>
Notez que ce n'est pas une variable inutile, mais le terme constant pour la régression. Encore plus, quelle que soit la transformation (dans ce cas, ajout d'une dimension constante) Vous postulez à vos données de train, vous devez également appliquer à vos données de test.