[PYTHON] Datenvorverarbeitung (2) Ändern Sie die Daten von "Kategorisch" in "Numerisch".

Benötigen Sie OneHotEncoder

Warum ist OneHotEncoder wichtig für die Verwendung von Scikit-learn?

Bei der Verwendung von Klassifizierung und Regression beim maschinellen Lernen behandelt der Computer Zahlen grundsätzlich als fortlaufende Zahlen. Mit anderen Worten, wenn es eine Zahl von 1 bis 10 gibt, wird 1 immer als größer als 10 erkannt.

Worüber redest du! Du wirst denken.

Aber denk darüber nach.

Wenn beispielsweise ein Tier wie unten gezeigt in einen numerischen Wert umgewandelt wird, bedeutet dies wirklich, dass Tiger numerisch größer als der Mensch ist? Basierend auf der folgenden Tabelle ist es beispielsweise Panda, wenn Sie den Durchschnitt von Tiger und Katze nehmen, was eine seltsame Situation ist.

Animal Transform to Numbers
Tiger 0
Panda 1
Cat 2
Human 3
Python 4

Auf diese Weise wird OneHotEncoder verwendet, wenn die Vorder- und Rückseite der Nummer bei der Konvertierung in eine Nummer keinen Sinn ergibt.

Wie geht OneHotEncoder mit den oben genannten Problemen um?

Wenn die obige Abbildung von OneHotEncoder verarbeitet wird, wird dies zum besseren Verständnis folgendermaßen.

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

Mit anderen Worten, es ist eine Methode zum Zählen jedes diskontinuierlichen Objekts, indem es in Spalten unterteilt wird. Auf diese Weise kann jedes Tier als unabhängiger Wert behandelt werden, nicht als fortlaufende Zahl.

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.]])

Abgerufen von Official Document

Notwendigkeit für LabelEncoder

Was ist LabelEncoder?

Nehmen wir hier noch einmal die oben verwendete Tabelle. Diese Tabelle ersetzt die Namen von Tieren wie Tiger und Panda durch Zahlen. LabelEncoder führt diesen Austauschvorgang durch. Wenden Sie nach dem Anwenden von LabelEncoder OneHotEncoder an.

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']

#Übrigens, wenn Sie eine Spalte mit df verwenden, sieht es so aus:
#LabelEncoder wird auf die Spalte City in df angewendet.

df.City = le.fit_transform(df.City)
#Oder
df.City = le.fit_transform(df['City'].values)

#Wenn Sie rückgängig machen möchten

df.City = le.inverse_trainsform(df.City)


Dies ist das offizielle Dokument

Pandas pd.get_dummies Funktion

get_dummies ist wie OneHotEncoder.

Ich konnte LabelEncoder gut verwenden, aber OneHotEncoder konnte ich nicht gut verwenden. Als Ergebnis meiner Recherchen erhielt ich die Information, dass Pandas 'get_dummies fast dasselbe zu tun scheint. Übrigens, wenn jemand, der OneHotEncoder unterrichtet oder eine Website kennt, die gut organisiert ist, lassen Sie es mich bitte wissen. Get_dummies scheint also dieselbe Rolle zu spielen wie OneHotEncoder, indem für jedes Element mit kategorialem Wert eine Spalte erstellt wird. Die Atmosphäre ist wie folgt.

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'])

#Erstellen Sie eine Spalte für jedes Tierelement, 0,Notiert von 1.

Hier Offizielles Dokument

Der Typ, der die Unterschiede auf nette Weise zusammenfasst (Englisch)

Es fasst die Unterschiede zwischen LabelEncoder und OneHotEncoder gut zusammen. This

Recommended Posts

Datenvorverarbeitung (2) Ändern Sie die Daten von "Kategorisch" in "Numerisch".
SIGNATE Quest ① Vom Lesen der Daten bis zur Vorverarbeitung
[Kaggle] Vom Lesen der Daten bis zur Vorverarbeitung und Codierung
Ich möchte sagen, dass es eine Datenvorverarbeitung gibt ~
Von der Installation von Elasticsearch bis zur Dateneingabe
Abrufen von Daten von MacNote3 und Migrieren zu Write
[Python] Fluss vom Web-Scraping zur Datenanalyse
[AWS] Migrieren Sie Daten von DynamoDB nach Aurora MySQL
Summe von 1 bis 10
So kratzen Sie Bilddaten von Flickr mit Python
Automatische Datenmigration vom Yahoo Root Lab nach Strava
Senden Sie Protokolldaten vom Server an Splunk Cloud
Senden Sie Daten von Python über die Socket-Kommunikation an Processing
DataNitro, Implementierung einer Funktion zum Lesen von Daten aus dem Blatt