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))