sklearn scikit machine learning learn datasets python scikit-learn

python - machine - scikit-learn vs tensorflow



etiqueta-codificador que codifica valores perdidos (4)

Hola, un pequeño truco computacional que hice para mi propio trabajo:

from sklearn.preprocessing import LabelEncoder import pandas as pd import numpy as np a = pd.DataFrame([''A'',''B'',''C'',np.nan,''D'',''A'']) le = LabelEncoder() ### fit with the desired col, col in position 0 for this example fit_by = [i for i in a.iloc[:,0].unique() if type(i) == str] le.fit(fit_by) ### Set transformed col leaving np.NaN as they are a["transformed"] = fit_by.apply(lambda x: le.transform([x])[0] if type(x) == str else x)

Estoy usando el codificador de etiquetas para convertir datos categóricos en valores neumeros.

¿Cómo maneja LabelEncoder los valores perdidos?

from sklearn.preprocessing import LabelEncoder import pandas as pd import numpy as np a = pd.DataFrame([''A'',''B'',''C'',np.nan,''D'',''A'']) le = LabelEncoder() le.fit_transform(a)

Salida

array([1, 2, 3, 0, 4, 1])

Para el ejemplo anterior, el codificador de etiquetas cambió los valores de NaN a una categoría. ¿Cómo sabría qué categoría representa los valores perdidos?


Me enfrenté al mismo problema pero ninguno de los anteriores funcionó para mí. Así que agregué una nueva fila a los datos de entrenamiento que solo contenían "nan"


No use LabelEncoder con valores perdidos. No sé qué versión de scikit-learn está utilizando, pero en 0.17.1 su código plantea TypeError: unorderable types: str() > float() .

Como puede ver en la fuente , usa numpy.unique contra los datos a codificar, lo que aumenta a TypeError si se encuentran valores faltantes. Si desea codificar valores perdidos, primero cambie su tipo a una cadena:

a[pd.isnull(a)] = ''NaN''


Puede completar el valor de na por algún valor y luego cambiar el tipo de columna de marco de datos a cadena para que las cosas funcionen.

from sklearn.preprocessing import LabelEncoder import pandas as pd import numpy as np a = pd.DataFrame([''A'',''B'',''C'',np.nan,''D'',''A'']) a.fillna(99) le = LabelEncoder() le.fit_transform(a.astype(str))