Si recientemente comenzó su viaje en el aprendizaje automático, puede confundirse entre LabelEncoder y OneHotEncoder . Ambos codificadores son parte de la biblioteca SciKit Learn en Python y ambos se utilizan para convertir datos categóricos o textuales en números que nuestros modelos predictivos entienden mejor. Veamos las diferencias entre los codificadores en un ejemplo simple.
Codificación de caracteres
En primer lugar, la documentación de SciKit Learn para LabelEncoder se puede encontrar aquí . Ahora considere los siguientes datos:
Datos de SuperDataScienceEn este ejemplo, la primera columna (país) es completamente texto. Como ya sabrá, no podemos usar texto en los datos para entrenar el modelo. Por lo tanto, antes de que podamos comenzar el proceso, debemos preparar estos datos.
Y para convertir tales categorías en modelos comprensibles de datos numéricos, utilizamos la clase LabelEncoder . Por lo tanto, todo lo que tenemos que hacer para obtener el atributo para la primera columna es importar la clase desde la biblioteca sklearn , procesar la columna con la función fit_transform y reemplazar los datos de texto existentes con la nueva codificada. Veamos el código.
from sklearn.preprocessing import LabelEncoder labelencoder = LabelEncoder() x[:, 0] = labelencoder.fit_transform(x[:, 0])
Se supone que los datos están en la variable x . Después de ejecutar el código anterior, si marca el valor x , verá que los tres países en la primera columna han sido reemplazados por los números 0, 1 y 2.
En general, esta es la codificación de los signos. Pero dependiendo de los datos, esta conversión crea un nuevo problema. Hemos convertido un conjunto de países en un conjunto de números. Pero estos son solo datos categóricos, y de hecho no hay conexión entre los números.
El problema aquí es que, dado que hay diferentes números en la misma columna, el modelo pensará incorrectamente que los datos están en un orden especial: 0 <1 <2 Aunque esto, por supuesto, no es así. Para resolver el problema, usamos OneHotEncoder .
OneHotEncoder
Si está interesado en leer la documentación, puede encontrarla aquí . Ahora, como ya hemos discutido, dependiendo de los datos que tenemos, podemos encontrar una situación en la que, después de codificar los atributos, nuestro modelo se confunde, asumiendo falsamente que los datos están conectados por un orden o jerarquía que realmente no está allí. Para evitar esto, usaremos OneHotEncoder .
Este codificador toma una columna con datos categóricos que se ha codificado previamente en una característica y crea varias columnas nuevas para ella. Los números se reemplazan con unos y ceros, dependiendo de qué columna cuyo valor es inherente. En nuestro ejemplo, obtenemos tres nuevas columnas, una para cada país: Francia, Alemania y España.
Para las filas cuya primera columna es Francia, la columna "Francia" se establecerá en "1" y las otras dos columnas en "0". Del mismo modo, para las filas cuya primera columna es Alemania, la columna de Alemania tendrá "1" y las otras dos columnas tendrán "0".
Esto se hace de manera muy simple:
from sklearn.preprocessing import OneHotEncoder onehotencoder = OneHotEncoder(categorical_features = [0]) x = onehotencoder.fit_transform(x).toarray()
En el constructor, indicamos qué columna debe procesar OneHotEncoder , en nuestro caso - [0] . Luego, transforme la matriz x utilizando la función fit_transform del objeto codificador que acaba de crear. Eso es todo, ahora tenemos tres nuevas columnas en el conjunto de datos:
Como puede ver, en lugar de una columna con un país, tenemos tres nuevas que codifican este país.
Esta es la diferencia de LabelEncoder y OneHotEncoder .