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óndictionary * 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'
yalgorithm='omp'
y se anula conalpha
en el casoomp
. SiNone
, entoncestransform_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. Sialgorithm='threshold'
,alpha
es el valor absoluto del umbral por debajo del cual los coeficientes serán reducidos a cero. Sialgorithm='omp'
,alpha
es el parámetro de tolerancia: el valor del error de reconstrucción al que se apunta. En este caso, anulan_nonzero_coefs
. Si esNone
, 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 contextojoblib.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 cuandoshuffle
se establece comoTrue
, 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
Ajusta el modelo a partir de los datos en X.
Ajusta a los datos y luego los transforma.
Obtiene los parámetros para este estimador.
Establece los parámetros de este estimador.
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 yn_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
ey
con los parámetros opcionalesfit_params
y devuelve una versión transformada deX
.- 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.