Get_dummies de Panda vs. OneHotEncoder de Sklearn () :: ¿Qué es más eficiente?

Estoy aprendiendo diferentes métodos para convertir variables categóricas a numéricas para los clasificadores de aprendizaje automático. Me encontré con el método pd.get_dummies y sklearn.preprocessing.OneHotEncoder() y quería ver cómo diferían en términos de rendimiento y uso.

Encontré un tutorial sobre cómo usar OneHotEnocder() en https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical- características / ya que la documentación de sklearn no fue muy útil en esta característica. Tengo la sensación de que no lo estoy haciendo correctamente … pero

¿Pueden algunos explicar los pros y los contras de usar pd.dummies sobre sklearn.preprocessing.OneHotEncoder() y viceversa? Sé que OneHotEncoder() te da una matriz dispersa pero, aparte de eso, no estoy seguro de cómo se usa y de cuáles son los beneficios sobre el método de los pandas . ¿Lo estoy usando ineficientemente?

 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 

OneHotEncoder no puede procesar valores de cadena directamente. Si sus características nominales son cadenas, primero debe mapearlas en números enteros.

pandas.get_dummies es algo opuesto. De forma predeterminada, solo convierte las columnas de cadena en una representación única, a menos que se especifiquen columnas.