Même si j'étudie, je l'oublierai bientôt, donc je posterai un article à Qiita pour un mémorandum et une pratique de sortie. Je vous serais reconnaissant de bien vouloir commenter les erreurs ou les meilleurs moyens.
Je souhaite effectuer un encodage à chaud avec l'apprentissage automatique, mais je ne sais pas quel type de données se trouvent dans les données de test.
Chaque site dit que si vous voulez faire un encodage à chaud, vous devez utiliser get_dummies
, mais par exemple
** train_df ['sex']
a Male
et Female
, maistest_df ['sex']
a seulement Male
**
Dans un tel cas, si vous utilisez normalement get_dummies
, le nombre de colonnes créées changera. Ce n'est pas bon.
Après de nombreuses recherches, je suis arrivé à l'article suivant.
[Python] N'utilisez pas pandas.get_dummies pour l'apprentissage automatique
L'article lui-même n'utilise pas get_dummies, mais utilise le ʻOne Hot Encoderde
sklearn. Cependant, je voulais analyser les données au format Pandas et enfin les convertir au format
Numpy, donc j'étais particulier à faire quelque chose avec
Pandas`.
Cela est expliqué dans le commentaire de l'article ↑, et dans cet article je vais le laisser tomber au point que je puisse le mâcher à ma manière.
L'implémentation finit par utiliser get_dummies
.
# (i) df_Un unique de train est"hoge"Quand"fuga".. B unique"a"Quand"b"
df_train = pd.DataFrame({"A": ["hoge", "fuga"], "B": ["a", "b"]})
# (ii) df_Un unique de train est"hoge"Quand"piyo".. B unique"a"Quand"c"
df_test = pd.DataFrame({"A": ["hoge", "piyo"], "B": ["a", "c"]})
# (iii)Dans la catégorie A est"hoge"Quand"fuga", B"a"Quand"b"だよQuand決め打ちしてしまう
df_train["A"] = pd.Categorical(df_train["A"], categories=["hoge", "fuga"])
df_train["B"] = pd.Categorical(df_train["B"], categories=["a", "b"])
df_test["A"] = pd.Categorical(df_test["A"], categories=["hoge", "fuga"])
df_test["B"] = pd.Categorical(df_test["B"], categories=["a", "b"])
# (iv) get_un avec des mannequins-hot
df_train = pd.get_dummies(df_train)
df_test = pd.get_dummies(df_test)
Les dernières données uniques sont les suivantes.
df_train
A_hoge A_fuga B_a B_b
0 1 0 1 0
1 0 1 0 1
df_test
A_hoge A_fuga B_a B_b
0 1 0 1 0
1 0 0 0 0
J'ai pu utiliser en toute sécurité uniquement le train unique. Cette fois, il a été pris en charge par un codage en dur, mais si vous utilisez ʻunique` séparément, vous pouvez le gérer de manière plus flexible.
La raison pour laquelle df_train corrige également la catégorie est que si cela n'est pas fait, l'ordre de hoge et fuga sera inversé.
Recommended Posts