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.
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.
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
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 |
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
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
Es fasst die Unterschiede zwischen LabelEncoder und OneHotEncoder gut zusammen. This
Recommended Posts