[PYTHON] Prétraitement des données (2) Changez les données de catégorielles à numériques.

Besoin de OneHotEncoder

Pourquoi OneHotEncoder est-il important pour l'utilisation de Scikit-learn?

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.

Comment OneHotEncoder gère-t-il les problèmes mentionnés ci-dessus?

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.

code

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

Besoin de LabelEncoder

Qu'est-ce que LabelEncoder?

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

code

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

Fonction Pandas pd.get_dummies

get_dummies est comme OneHotEncoder.

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.

Ici Document officiel

Le gars qui résume les différences de manière sympathique (anglais)

Il résume bien les différences entre LabelEncoder et OneHotEncoder. Ce

Recommended Posts

Prétraitement des données (2) Changez les données de catégorielles à numériques.
SIGNATURE Quête ① De la lecture des données au prétraitement
[Kaggle] De la lecture des données au prétraitement et au codage
Je veux dire qu'il y a un prétraitement des données ~
De l'installation d'Elasticsearch à la saisie des données
Récupération des données de MacNote3 et migration vers Write
[Python] Flux du scraping Web à l'analyse des données
[AWS] Migrer les données de DynamoDB vers Aurora MySQL
Somme de 1 à 10
Comment récupérer des données d'image de Flickr avec Python
Migration automatique des données de Yahoo Root Lab vers Strava
Envoyer les données du journal du serveur vers Splunk Cloud
Envoyer des données de Python au traitement via une communication socket
DataNitro, implémentation de la fonction de lecture des données de feuille