sklearn.preprocessing.OneHotEncoder

class sklearn.preprocessing.OneHotEncoder

Codifica las características categóricas como un arreglo numérico one-hot.

La entrada de este transformador debe ser un array-like de enteros o cadenas, que denote los valores que toman las características categóricas (discretas). Las características se codifican utilizando un esquema de codificación one-hot (también conocido como “one-of-K” o “dummy”). Esto crea una columna binaria para cada categoría y devuelve una matriz dispersa o un arreglo denso (dependiendo del parámetro sparse)

Por defecto, el codificador deriva las categorías basándose en los valores únicos de cada característica. Alternativamente, también puedes especificar las categories manualmente.

Esta codificación es necesaria para alimentar los datos categóricos a muchos estimadores de scikit-learn, especialmente los modelos lineales y las SVM con los núcleos estándar.

Nota: una codificación one-hot de las etiquetas y debe utilizar un LabelBinarizer en su lugar.

Lee más en el Manual de usuario.

Distinto en la versión 0.20.

Parámetros
categories“auto” o una list de array-like, default=”auto”

Categorías (valores únicos) por característica:

  • “auto” : Determina las categorías automáticamente a partir de los datos de entrenamiento.

  • lista (list): categories[i] contiene las categorías esperadas en la i-ésima columna. Las categorías pasadas no deben mezclar cadenas y valores numéricos dentro de una misma característica, y deben ordenarse en caso de valores numéricos.

Las categorías utilizadas se encuentran en el atributo categories_.

Nuevo en la versión 0.20.

drop{“first”, “if_binary”} o un array-like de forma (n_features,), default=None

Especifica una metodología a utilizar para eliminar una de las categorías por característica. Esto es útil en situaciones en las que las características perfectamente colineales causan problemas, como cuando se introducen los datos resultantes en una red neuronal o en una regresión no regularizada.

Sin embargo, la eliminación de una categoría rompe la simetría de la representación original y, por tanto, puede inducir un sesgo en los modelos posteriores, por ejemplo, en los modelos de clasificación o regresión lineal penalizados.

  • None: conserva todas las características (por defecto).

  • “first” : elimina la primera categoría en cada característica. Si solo hay una categoría presente, la característica se eliminará por completo.

  • “if_binary” : elimina la primera categoría en cada característica con dos categorías. Las características con 1 o más de 2 categorías se dejan intactas.

  • array : drop[i] es la categoría en la característica X[:, i] que debe ser descartada.

Distinto en la versión 0.23: Opción añadida “if_binary”.

sparsebool, default=True

Devolverá una matriz dispersa si se establece como True, de lo contrario devolverá un arreglo.

dtypetipo numérico, default=float

Tipo de salida (dtype) deseado.

handle_unknown{“error”, “ignore”}, default=”error”

Si se produce un error o se ignora si una característica categórica desconocida está presente durante la transformación (por defecto, se produce). Cuando este parámetro se establece en “ignore” y se encuentra una categoría desconocida durante la transformación, las columnas codificadas one-hot resultantes para esta característica serán todas ceros. En la transformación inversa, una categoría desconocida se denotará como None.

Atributos
categories_lista de arreglos

Las categorías de cada característica determinadas durante el ajuste (en orden de las características en X y correspondientes con la salida de transform). Esto incluye la categoría especificada en drop (si la hay).

drop_idx_arreglo de forma (n_features,)
  • drop_idx_[i] es el índice en categories_[i] de la categoría que se va a eliminar para cada característica.

  • drop_idx_[i] = None si no hay que eliminar ninguna categoría de la característica con el índice i, por ejemplo, cuando drop='if_binary' y la característica no es binaria.

  • drop_idx_ = None si se conservan todas las características transformadas.

Distinto en la versión 0.23: Se ha añadido la posibilidad de contener valores None.

Ver también

OrdinalEncoder

Realiza una codificación ordinal (entera) de las características categóricas.

sklearn.feature_extraction.DictVectorizer

Realiza una codificación one-hot de los elementos del diccionario (también maneja características con valores de cadena).

sklearn.feature_extraction.FeatureHasher

Realiza una codificación one-hot aproximada de los elementos del diccionario o de las cadenas.

LabelBinarizer

Binariza las etiquetas de una forma uno contra todos (one-vs-all).

MultiLabelBinarizer

Transforma entre un iterable de iterables y un formato multietiqueta, por ejemplo, una matriz binaria (muestras x clases) que indica la presencia de una etiqueta de clase.

Ejemplos

Dado un conjunto de datos con dos características, dejamos que el codificador encuentre los valores únicos por característica y transforme los datos en una codificación binaria one-hot.

>>> from sklearn.preprocessing import OneHotEncoder

Se pueden descartar las categorías no vistas durante fit:

>>> enc = OneHotEncoder(handle_unknown='ignore')
>>> X = [['Male', 1], ['Female', 3], ['Female', 2]]
>>> enc.fit(X)
OneHotEncoder(handle_unknown='ignore')
>>> enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> enc.transform([['Female', 1], ['Male', 4]]).toarray()
array([[1., 0., 1., 0., 0.],
       [0., 1., 0., 0., 0.]])
>>> enc.inverse_transform([[0, 1, 1, 0, 0], [0, 0, 0, 1, 0]])
array([['Male', 1],
       [None, 2]], dtype=object)
>>> enc.get_feature_names(['gender', 'group'])
array(['gender_Female', 'gender_Male', 'group_1', 'group_2', 'group_3'],
  dtype=object)

Siempre se puede eliminar la primera columna para cada característica:

>>> drop_enc = OneHotEncoder(drop='first').fit(X)
>>> drop_enc.categories_
[array(['Female', 'Male'], dtype=object), array([1, 2, 3], dtype=object)]
>>> drop_enc.transform([['Female', 1], ['Male', 2]]).toarray()
array([[0., 0., 0.],
       [1., 1., 0.]])

O bien, eliminar una columna para la característica que sólo tiene 2 categorías:

>>> drop_binary_enc = OneHotEncoder(drop='if_binary').fit(X)
>>> drop_binary_enc.transform([['Female', 1], ['Male', 2]]).toarray()
array([[0., 1., 0., 0.],
       [1., 0., 1., 0.]])

Métodos

fit

Ajusta OneHotEncoder a X.

fit_transform

Ajusta OneHotEncoder a X, luego transforma X.

get_feature_names

Devuelve los nombres de las características para las características de salida.

get_params

Obtiene los parámetros para este estimador.

inverse_transform

Convierte los datos a la representación original.

set_params

Establece los parámetros de este estimador.

transform

Transformar X utilizando la codificación one-hot.

fit()

Ajusta OneHotEncoder a X.

Parámetros
Xarray-like, forma [n_samples, n_features]

Los datos para determinar las categorías de cada característica.

yNone

Ignorado. Este parámetro sólo existe por compatibilidad con Pipeline.

Devuelve
self
fit_transform()

Ajusta OneHotEncoder a X, luego transforma X.

Equivalente a fit(X).transform(X) pero más conveniente.

Parámetros
Xarray-like, forma [n_samples, n_features]

Los datos a codificar.

yNone

Ignorado. Este parámetro sólo existe por compatibilidad con Pipeline.

Devuelve
X_outmatriz dispersa si sparse=True de lo contrario un arreglo 2-d

Entrada transformada.

get_feature_names()

Devuelve los nombres de las características para las características de salida.

Parámetros
input_featureslist de str de forma (n_features,)

Nombres de cadenas para las características de entrada, si están disponibles. Por defecto, se utiliza «x0», «x1», … «xn_features».

Devuelve
output_feature_namesndarray de forma (n_output_features,)

Arreglo de nombres de características.

get_params()

Obtiene los parámetros para este estimador.

Parámetros
deepbool, default=True

Si es True, devolverá los parámetros para este estimador y los subobjetos contenidos que son estimadores.

Devuelve
paramsdict

Los nombres de los parámetros mapeados a sus valores.

inverse_transform()

Convierte los datos a la representación original.

En caso de que se encuentren categorías desconocidas (todos los ceros en la codificación one-hot), se utiliza None para representar esta categoría.

Parámetros
Xarray-like o matriz dispersa, forma [n_samples, n_encoded_features]

Los datos transformados.

Devuelve
X_trarray-like, forma [n_samples, n_features]

Arreglo transformado inverso.

set_params()

Establece los parámetros de este estimador.

El método funciona tanto en estimadores simples como en objetos anidados (como Pipeline). Estos últimos tienen parámetros de la forma <component>__<parameter> para que sea posible actualizar cada componente de un objeto anidado.

Parámetros
**paramsdict

Parámetros del estimador.

Devuelve
selfinstancia del estimador

Instancia del estimador.

transform()

Transformar X utilizando la codificación one-hot.

Parámetros
Xarray-like, forma [n_samples, n_features]

Los datos a codificar.

Devuelve
X_outmatriz dispersa si sparse=True de lo contrario un arreglo 2-d

Entrada transformada.

Ejemplos utilizando sklearn.preprocessing.OneHotEncoder