Lors de l'utilisation de la classification et de la régression dans l'apprentissage automatique, l'ordinateur traite essentiellement les nombres comme des nombres consécutifs. En d'autres termes, lorsqu'il y a un nombre de 1 à 10, 1 est toujours reconnu comme étant supérieur à 10.
Qu'est-ce que tu racontes! Vous penserez.
Mais pensez-y.
Par exemple, si un animal est converti en une valeur numérique comme indiqué ci-dessous, cela signifie-t-il vraiment que Tiger est numériquement plus grand que l'homme? Par exemple, d'après le tableau ci-dessous, si vous prenez la moyenne de Tiger et Cat, ce sera Panda, ce qui est une situation étrange.
Animal | Transform to Numbers |
---|---|
Tiger | 0 |
Panda | 1 |
Cat | 2 |
Human | 3 |
Python | 4 |
De cette manière, OneHotEncoder est utilisé lorsque le recto et le verso du nombre n'ont aucun sens lorsqu'ils sont convertis en nombre.
Pour faciliter la compréhension, lorsque la figure ci-dessus est traitée par OneHotEncoder, cela devient comme ça.
Tiger | Panda | Cat | Human | Python |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 1 |
En d'autres termes, c'est une méthode de comptage de chaque objet discontinu en le divisant en colonnes. En faisant cela, chaque animal peut être traité comme une valeur indépendante et non comme un nombre continu.
python
>>>
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
Extrait de Official Document
Reprenons ici le tableau utilisé ci-dessus. Ce tableau remplace les noms d'animaux tels que Tigre et Panda par des nombres. LabelEncoder effectue cette opération de remplacement. Ainsi, après avoir appliqué LabelEncoder, appliquez OneHotEncoder.
Animal | Transform to Numbers |
---|---|
Tiger | 0 |
Panda | 1 |
Cat | 2 |
Human | 3 |
Python | 4 |
python
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(["paris", "paris", "tokyo", "amsterdam"])
le.transform(["tokyo", "tokyo", "paris"])
>>>array([2, 2, 1]...)
list(le.inverse_transform([2, 2, 1]))
>>>['tokyo', 'tokyo', 'paris']
#À propos, lorsque vous utilisez une colonne avec df, cela ressemble à ceci:
#LabelEncoder est appliqué à la colonne appelée City dans df.
df.City = le.fit_transform(df.City)
#Ou
df.City = le.fit_transform(df['City'].values)
#Quand tu veux annuler
df.City = le.inverse_trainsform(df.City)
Ceci est le Document officiel
J'ai pu bien utiliser LabelEncoder, mais je ne pouvais pas bien utiliser OneHotEncoder. Ainsi, à la suite de mes recherches, j'ai eu l'information que get_dummies de Pandas semble faire presque la même chose. Au fait, si quelqu'un qui enseigne OneHotEncoder ou connaît un site qui est organisé de manière agréable, veuillez me le faire savoir. Ainsi, get_dummies semble jouer le même rôle que OneHotEncoder en créant une colonne pour chaque élément de valeur catégorielle. L'atmosphère est la suivante.
Tiger | Panda | Cat | Human | Python |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 1 |
df = pd.get_dummies(df, columns = ['animal'])
#Créez une colonne pour chaque élément de l'animal, 0,Noté par 1.
Il résume bien les différences entre LabelEncoder et OneHotEncoder. Ce
Recommended Posts