sklearn.decomposition.DictionaryLearning

class sklearn.decomposition.DictionaryLearning

Aprendizaje de Diccionario

Encuentra un diccionario (un conjunto de átomos) que puede utilizarse mejor para representar los datos utilizando un código disperso.

Resuelve el problema de optimización:

(U^*,V^*) = argmin 0.5 || X - U V ||_2^2 + alpha * || U ||_1
            (U,V)
            with || V_k ||_2 = 1 for all  0 <= k < n_components

Más información en el Manual de Usuario.

Parámetros
n_componentsint, default=n_features

Número de elementos del diccionario a extraer.

alphafloat, default=1.0

Parámetro de control de la dispersión.

max_iterint, default=1000

Número máximo de iteraciones a realizar.

tolfloat, default=1e-8

Tolerancia al error numérico.

fit_algorithm{“lars”, “cd”}, default=”lars”
  • 'lars': utiliza el método de regresión de ángulo mínimo para resolver el problema de lasso (lars_path);

  • 'cd': utiliza el método de descenso coordinado para calcular la solución Lasso (Lasso). Lars será más rápido si los componentes estimados son dispersos.

Nuevo en la versión 0.17: Método de descenso de coordinado cd para mejorar la velocidad.

transform_algorithm{“lasso_lars”, “lasso_cd”, “lars”, “omp”, “threshold”}, default=”omp”

Algoritmo utilizado para transformar los datos:

  • 'lars': utiliza el método de regresión de ángulo mínimo (lars_path);

  • 'lasso_lars': utiliza Lars para calcular la solución Lasso.

  • 'lasso_cd': utiliza el método de descenso coordinado para calcular la solución Lasso (Lasso). El método «lasso_lars» será más rápido si los componentes estimados son dispersos.

  • 'omp': utiliza la búsqueda de correspondencias ortogonales para estimar la solución dispersa.

  • 'threshold': reduce a cero todos los coeficientes menores que alfa de la proyección dictionary * X'.

Nuevo en la versión 0.17: Método de descenso coordinado lasso_cd para mejorar la velocidad.

transform_n_nonzero_coefsint, default=None

Número de coeficientes distintos de cero para el objetivo en cada columna de la solución. Sólo se utiliza con algorithm='lars' y algorithm='omp' y se anula con alpha en el caso omp. Si None, entonces transform_n_nonzero_coefs=int(n_features / 10).

transform_alphafloat, default=None

Si algorithm='lasso_lars' o `algorithm='lasso_cd', alpha es la penalización aplicada a la norma L1. Si algorithm='threshold', alpha es el valor absoluto del umbral por debajo del cual los coeficientes serán reducidos a cero. Si algorithm='omp', alpha es el parámetro de tolerancia: el valor del error de reconstrucción al que se apunta. En este caso, anula n_nonzero_coefs. Si es None, por defecto es 1.0

n_jobsint o None, default=None

Número de trabajos paralelos a ejecutar. None significa 1 a menos que esté en un contexto joblib.parallel_backend. -1 significa utilizar todos los procesadores. Ver Glosario para más detalles.

code_initndarray de forma (n_samples, n_components), default=None

Valor inicial del código, para el reinicio en caliente.

dict_initndarray de forma (n_components, n_features), default=None

Valores iniciales del diccionario, para el reinicio en caliente.

verbosebool, default=False

Controlar la verbosidad del procedimiento.

split_signbool, default=False

Si se divide el vector de características disperso en la concatenación de su parte negativa y su parte positiva. Esto puede mejorar el rendimiento de los clasificadores posteriores.

random_stateentero, instancia de RandomState o None, default=None

Se utiliza para inicializar el diccionario cuando no se especifica dict_init, barajar los datos aleatoriamente cuando shuffle se establece como True, y actualizar el diccionario. Pasa un número entero (int) para que los resultados sean reproducibles a través de múltiples llamadas a la función. Ver Glosario.

positive_codebool, default=False

Si se debe imponer la positividad al encontrar el código.

Nuevo en la versión 0.20.

positive_dictbool, default=False

Si se impone la positividad al encontrar el diccionario

Nuevo en la versión 0.20.

transform_max_iterint, default=1000

Número máximo de iteraciones a realizar si algoritmo='lasso_cd' o 'lasso_lars'.

Nuevo en la versión 0.22.

Atributos
components_ndarray de forma (n_components, n_features)

átomos del diccionario extraídos de los datos

error_arreglo

vector de errores en cada iteración

n_iter_int

Número de iteraciones ejecutadas.

Notas

Referencias:

J. Mairal, F. Bach, J. Ponce, G. Sapiro, 2009: Online dictionary learning for sparse coding (https://www.di.ens.fr/sierra/pdfs/icml09.pdf)

Ejemplos

>>> import numpy as np
>>> from sklearn.datasets import make_sparse_coded_signal
>>> from sklearn.decomposition import DictionaryLearning
>>> X, dictionary, code = make_sparse_coded_signal(
...     n_samples=100, n_components=15, n_features=20, n_nonzero_coefs=10,
...     random_state=42,
... )
>>> dict_learner = DictionaryLearning(
...     n_components=15, transform_algorithm='lasso_lars', random_state=42,
... )
>>> X_transformed = dict_learner.fit_transform(X)

Podemos comprobar el nivel de dispersión de X_transformed:

>>> np.mean(X_transformed == 0)
0.88...

Podemos comparar la norma euclidiana al cuadrado promedio del error de reconstrucción de la señal codificada dispersa con respecto a la norma euclidiana al cuadrado de la señal original:

>>> X_hat = X_transformed @ dict_learner.components_
>>> np.mean(np.sum((X_hat - X) ** 2, axis=1) / np.sum(X ** 2, axis=1))
0.07...

Métodos

fit

Ajusta el modelo a partir de los datos en X.

fit_transform

Ajusta a los datos y luego los transforma.

get_params

Obtiene los parámetros para este estimador.

set_params

Establece los parámetros de este estimador.

transform

Codifica los datos como una combinación dispersa de los átomos del diccionario.

fit()

Ajusta el modelo a partir de los datos en X.

Parámetros
Xarray-like de forma (n_samples, n_features)

Vector de entrenamiento, donde n_samples es el número de muestras y n_features es el número de características.

yIgnorado
Devuelve
selfobject

Devuelve el mismo objeto.

fit_transform()

Ajusta a los datos y luego los transforma.

Ajusta el transformador a X e y con los parámetros opcionales fit_params y devuelve una versión transformada de X.

Parámetros
Xarray-like de forma (n_samples, n_features)

Muestras de entrada.

yarray-like de forma (n_samples,) o (n_samples, n_outputs), default=None

Valores objetivo (None para transformaciones no supervisadas).

**fit_paramsdict

Parámetros de ajuste adicionales.

Devuelve
X_newarreglo ndarray de forma (n_samples, n_features_new)

Arreglo transformado.

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.

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

Codifica los datos como una combinación dispersa de los átomos del diccionario.

El método de codificación está determinado por el parámetro del objeto transform_algorithm.

Parámetros
Xndarray de forma (n_samples, n_features)

Los datos de prueba que se van a transformar, deben tener el mismo número de características que los datos utilizados para entrenar el modelo.

Devuelve
X_newndarray de forma (n_samples, n_components)

Datos transformados.