Ich lerne verschiedene Methoden, um kategoriale Variablen für maschinell lernende Klassifikatoren in numerische umzuwandeln. Ich bin auf die pd.get_dummies
Methode gestoßen sklearn.preprocessing.OneHotEncoder()
und wollte sehen, wie sie sich in Bezug auf Leistung und Nutzung unterscheiden.
Ich habe seitdem ein Tutorial zur Verwendung OneHotEncoder()
unter https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/ gefunden Die sklearn
Dokumentation war für diese Funktion nicht allzu hilfreich. Ich habe das Gefühl, ich mache es nicht richtig ... aber
Können einige die Vor- und Nachteile der Verwendung von pd.dummies
Over erklären sklearn.preprocessing.OneHotEncoder()
und umgekehrt? Ich weiß, dass OneHotEncoder()
Sie eine spärliche Matrix erhalten, aber ansonsten bin ich mir nicht sicher, wie sie verwendet wird und welche Vorteile sie gegenüber der pandas
Methode haben. Benutze ich es ineffizient?
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
sns.set()
%matplotlib inline
#Iris Plot
iris = load_iris()
n_samples, m_features = iris.data.shape
#Load Data
X, y = iris.data, iris.target
D_target_dummy = dict(zip(np.arange(iris.target_names.shape[0]), iris.target_names))
DF_data = pd.DataFrame(X,columns=iris.feature_names)
DF_data["target"] = pd.Series(y).map(D_target_dummy)
#sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \
#0 5.1 3.5 1.4 0.2
#1 4.9 3.0 1.4 0.2
#2 4.7 3.2 1.3 0.2
#3 4.6 3.1 1.5 0.2
#4 5.0 3.6 1.4 0.2
#5 5.4 3.9 1.7 0.4
DF_dummies = pd.get_dummies(DF_data["target"])
#setosa versicolor virginica
#0 1 0 0
#1 1 0 0
#2 1 0 0
#3 1 0 0
#4 1 0 0
#5 1 0 0
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
def f1(DF_data):
Enc_ohe, Enc_label = OneHotEncoder(), LabelEncoder()
DF_data["Dummies"] = Enc_label.fit_transform(DF_data["target"])
DF_dummies2 = pd.DataFrame(Enc_ohe.fit_transform(DF_data[["Dummies"]]).todense(), columns = Enc_label.classes_)
return(DF_dummies2)
%timeit pd.get_dummies(DF_data["target"])
#1000 loops, best of 3: 777 µs per loop
%timeit f1(DF_data)
#100 loops, best of 3: 2.91 ms per loop