Le jeu de données movieLens était difficile à traiter comme celui-ci, donc comme mémo
L'ensemble de données passé dans l'état encodé à chaud comme indiqué ci-dessous
movie_id action horror romance sf
0 1 1 0 0 0
1 2 0 0 1 0
2 2 1 0 0 0
3 3 0 0 0 1
4 3 1 0 0 0
5 4 0 1 0 0
6 5 0 0 0 1
7 5 0 1 0 0
8 5 1 0 0 0
Je veux revenir à l'état catégorique avant l'encodage à chaud comme indiqué ci-dessous
movie_id genre
0 1 action
1 2 romance
2 2 action
3 3 sf
4 3 action
5 4 horror
6 5 sf
7 5 horror
8 5 action
Préparez la fonction suivante
def convert_onehot_to_category(df, id_col, one_hot_columns, category_col='category'):
df_concat = pd.DataFrame(columns=[id_col, category_col])
for col in one_hot_columns:
#Ne laissez que ceux avec une valeur de 1 ou plus
df_each = df[df[col] >= 1][[id_col, col]]
#Remplacer la valeur par la valeur de la catégorie
df_each[col] = col
df_each.columns = [id_col, category_col]
df_concat = pd.concat([df_concat, df_each], axis=0)
#Suppression en double
df_concat = df_concat.drop_duplicates().reset_index(drop=True).sort_values(by=id_col)
return df_concat
Comme ci-dessous,
--Nom de la colonne après l'encodage à chaud --Colonne contenant l'identifiant --Nom de la colonne après conversion en valeur de catégorie
Si tu réussis
genres = ['action', 'romance', 'sf', 'horror']
id_col = 'movie_id'
category_col = 'genre'
df_category = convert_onehot_to_category(df_onehot, id_col=id_col, one_hot_columns=genres, category_col=category_col)
print(df_category)
Convertit à la valeur de la catégorie d'origine
movie_id genre
0 1 action
1 2 action
4 2 romance
2 3 action
5 3 sf
7 4 horror
3 5 action
6 5 sf
8 5 horror
Recommended Posts