Panda get_dummies vs. Sklearn ist OneHotEncoder() :: Was sind die vor-und Nachteile?
Lerne ich verschiedene Methoden zur Umwandlung von kategorischen Variablen zu Numerik für machine-learning Classifier. Ich kam über die pd.get_dummies
Methode und sklearn.preprocessing.OneHotEncoder()
und ich wollte sehen, wie Sie unterschieden sich in Bezug auf Leistung und Verwendung.
Fand ich eine Anleitung, wie zu verwenden OneHotEnocder()
auf https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/ da die sklearn
Dokumentation war nicht allzu hilfreich, sich auf dieses feature. Ich habe das Gefühl, ich mache das nicht richtig...aber
Kann einige erklären die vor-und Nachteile der Verwendung von pd.dummies
über sklearn.preprocessing.OneHotEncoder()
- und Umgekehrt? Ich weiß, dass OneHotEncoder()
gibt Ihnen eine sparse-matrix, aber andere als die, die ich bin mir nicht sicher, wie es verwendet wird und was die Vorteile sind, über die pandas
Methode. Ich verwende 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
OneHotEncoder
nicht verarbeiten kann, die string-Werte direkt. Wenn Ihr Nenn-Funktionen, Zeichenketten sind, dann müssen Sie zuerst ordnen Sie Sie in Ganzzahlen.pandas.get_dummies
ist irgendwie das Gegenteil. Standardmäßig, es wandelt nur string-Spalten in one-hot-Vertretung, es sei denn, Spalten angegeben werden.OneHotEncoder
kann nicht angewendet werden auf strings als auch in 0.20.0-version.OneHotEncoder(sparse=False).fit_transform(pd.DataFrame(pd.Series(['good','bad','worst','good', 'good', 'bad'])))
funktioniert, was bedeutet, dassOneHotEncoder
angewendet werden können, auf stirngs.Für maschinelles lernen, Sie fast sicher wollen, verwenden Sie
sklearn.OneHotEncoder
. Für andere Aufgaben, wie einfache Analysen, Sie könnten in der Lage sein zu verwendenpd.get_dummies
, das ist ein bisschen bequemer.Beachten Sie, dass
sklearn.OneHotEncoder
wurde aktualisiert in der neuesten version, so dass es akzeptiert strings für kategoriale Variablen, sowie zahlen.Die crux ist, dass die
sklearn
encoder erzeugt eine Funktion, die weiterhin und kann dann angewendet werden, um neue Datensätze, die die gleiche kategoriale Variablen, mit konsistenten Ergebnissen.Hinweis, wie wir die gleichen encoder erstellten wir über
X_train
auf die neuen Daten eingestelltX_test
.Überlegen, was passiert, wenn
X_test
enthält verschiedene Ebenen alsX_train
für eine seiner Variablen. Zum Beispiel, sagen wir malX_train["color"]
enthält nur"red"
und"green"
, aber zusätzlich zu diesenX_test["color"]
enthält manchmal"blue"
.Wenn wir
pd.get_dummies
,X_test
werden am Ende mit einem zusätzlichen"color_blue"
Spalte, dieX_train
nicht haben, und die Inkonsequenz wird wahrscheinlich brechen, unseren code später auf, vor allem, wenn wir fütternX_test
zu einemsklearn
Modell, das wir trainierten aufX_train
.Und wenn wir wollen, um die Daten zu verarbeiten, wie dies in der Produktion, wo erhalten wir ein einziges Beispiel zu einer Zeit,
pd.get_dummies
wird nicht von nutzen sein.Mit
sklearn.OneHotEncoder
auf der anderen Seite, sobald wir Sie erstellt haben, die encoder, die wir wiederverwenden können, um die gleiche Ausgabe erzeugen jedes mal, mit Spalten nur für"red"
und"green"
. Und wir können explizit bestimmen, was geschieht, wenn es auf die neue Ebene"blue"
: wenn wir denken, dass das unmöglich ist, dann können wir sagen, es wirft einen Fehler mithandle_unknown="error"
; sonst können wir erzählen es auch weiter und setzen Sie einfach die roten und grünen Spalten auf 0, mithandle_unknown="ignore"
.