sklearn.decomposition
.NMF¶
- class sklearn.decomposition.NMF¶
Factorización de Matrices No Negativas (Non-Negative Matrix Factorization, NMF).
Encontrar dos matrices no negativas (W, H) cuyo producto se aproxime a la matriz no negativa X. Esta factorización se puede utilizar, por ejemplo, para la reducción de la dimensionalidad, la separación de fuentes o la extracción de temas.
La función objetivo es:
\[ \begin{align}\begin{aligned}0.5 * ||X - WH||_{Fro}^2 + alpha * l1_{ratio} * ||vec(W)||_1\\+ alpha * l1_{ratio} * ||vec(H)||_1\\+ 0.5 * alpha * (1 - l1_{ratio}) * ||W||_{Fro}^2\\+ 0.5 * alpha * (1 - l1_{ratio}) * ||H||_{Fro}^2\end{aligned}\end{align} \]Donde:
\(||A||_{Fro}^2 = \sum_{i,j} A_{ij}^2\) (norma de Frobenius)
\(||vec(A)||_1 = \sum_{i,j} abs(A_{ij})\) (Norma componente a componente L1)
Para el solucionador de actualización multiplicativa (“mu”), la norma de Frobenius (\(0.5 * ||X - WH||_{Fro}^2\)) puede cambiarse por otra función de pérdida de beta-divergencia, cambiando el parámetro beta_loss.
La función objetivo se minimiza con una minimización alterna de W y H.
Lee más en el Manual de usuario.
- Parámetros
- n_componentsint, default=None
Número de componentes, si n_components no se establece se mantienen todas las características.
- init{“random”, “nndsvd”, “nndsvda”, “nndsvdar”, “custom”}, default=None
Método utilizado para inicializar el procedimiento. Por defecto: None. Opciones válidas:
None
: “nndsvd” si n_components <= min(n_samples, n_features), en caso contrario, aleatorio.'random'
: matrices aleatorias no negativas, escaladas con: sqrt(X.mean() / n_components)'nndsvd'
: Inicialización de la Descomposición en Valores Singulares Doble no negativos (Nonnegative Double Singular Value Decomposition, NNDSVD) (mejor para la dispersión)'nndsvda'
: NNDSVD con ceros rellenados con el promedio de X (mejor cuando no se desea la dispersión)'nndsvdar'
NNDSVD con ceros rellenados con pequeños valores aleatorios (generalmente una alternativa más rápida y menos precisa a NNDSVDa para cuando no se desea la dispersión)'custom'
: utiliza matrices personalizadas W y H
- solver{“cd”, “mu”}, default=”cd”
Solver numérico a utilizar: “cd” es un solucionador del Descenso Coordinado. “mu” es un solucionador de Actualización Multiplicativa.
Nuevo en la versión 0.17: Solucionador del Descenso Coordinado.
Nuevo en la versión 0.19: Solucionador de Actualización Multiplicativa.
- beta_lossfloat o {“frobenius”, “kullback-leibler”, “itakura-saito”}, default=”frobenius”
Se minimiza la Divergencia Beta, midiendo la distancia entre X y el producto punto WH. Ten en cuenta que los valores diferentes de “frobenius” (o 2) y “kullback-leibler” (o 1) conducen ajustes significativamente más lentos. Ten en cuenta que para beta_loss <= 0 (o “itakura-saito”), la matriz de entrada X no puede contener ceros. Sólo se utiliza en el solucionador “mu”.
Nuevo en la versión 0.19.
- tolfloat, default=1e-4
Tolerancia de la condición de parada.
- max_iterint, default=200
Número máximo de iteraciones antes de que se agote el tiempo.
- random_stateentero, instancia de RandomState o None, default=None
Se utiliza para la inicialización (cuando
init
== “nndsvdar” o “random”), y en el Descenso Coordinado. Pasa un número entero (int) para resultados reproducibles a través de múltiples llamadas a la función. Ver Glosario.- alphafloat, default=0.
Constante que multiplica los términos de regularización. Ponlo en cero para no tener regularización.
Nuevo en la versión 0.17: alpha utilizado en el solucionador del Descenso Coordinado.
- l1_ratiofloat, default=0.
El parámetro de mezcla de la regularización, con 0 <= l1_ratio <= 1. Para l1_ratio = 0 la penalización es una penalización componente a componente L2 (también conocida como Norma de Frobenius). Para l1_ratio = 1 es una penalización componente a componente L1. Para 0 < l1_ratio < 1, la penalización es una combinación de L1 y L2.
Nuevo en la versión 0.17: El parámetro de regularización l1_ratio utilizado en el solucionador del Descenso Coordinado.
- verboseint, default=0
Si debe o no ser verboso.
- shufflebool, default=False
Si es verdadero, aleatoriza el orden de las coordenadas en el solucionador del CD.
Nuevo en la versión 0.17: El parámetro *shuffle*Parámetro utilizado en el solucionador del Descenso Coordinado.
- regularization{“both”, “components”, “transformation”, None}, default=”both”
Selecciona si la regularización afecta a los componentes (H), a la transformación (W), a ambos o a ninguno de ellos.
Nuevo en la versión 0.24.
- Atributos
- components_ndarray de forma (n_components, n_features)
Matriz de factorización, a veces llamada “dictionary”.
- n_components_int
El número de componentes. Es el mismo que el parámetro
n_components
si fue dado. De lo contrario, será el mismo que el número de características.- reconstruction_err_float
La norma de Frobenius de la diferencia matricial, o beta-divergencia, entre los datos de entrenamiento
X
y los datos reconstruidosWH
a partir del modelo ajustado.- n_iter_int
Número real de iteraciones.
Referencias
Cichocki, Andrzej, and P. H. A. N. Anh-Huy. «Fast local algorithms for large scale nonnegative matrix and tensor factorizations.» IEICE transactions on fundamentals of electronics, communications and computer sciences 92.3: 708-721, 2009.
Fevotte, C., & Idier, J. (2011). Algorithms for nonnegative matrix factorization with the beta-divergence. Neural Computation, 23(9).
Ejemplos
>>> import numpy as np >>> X = np.array([[1, 1], [2, 1], [3, 1.2], [4, 1], [5, 0.8], [6, 1]]) >>> from sklearn.decomposition import NMF >>> model = NMF(n_components=2, init='random', random_state=0) >>> W = model.fit_transform(X) >>> H = model.components_
Métodos
Aprende un modelo NMF para los datos X.
Aprende un modelo NMF para los datos X y devuelve los datos transformados.
Obtener los parámetros de este estimador.
Transforma los datos de nuevo a su espacio original.
Establece los parámetros de este estimador.
Transforma los datos X según el modelo NMF ajustado.
- fit()¶
Aprende un modelo NMF para los datos X.
- Parámetros
- X{array-like, sparse matrix} de forma (n_samples, n_features)
Matriz de datos a descomponer
- yIgnorado
- Devuelve
- self
- fit_transform()¶
Aprende un modelo NMF para los datos X y devuelve los datos transformados.
Esto es más eficiente que llamar a fit seguido de transform.
- Parámetros
- X{array-like, sparse matrix} de forma (n_samples, n_features)
Matriz de datos a descomponer
- yIgnorado
- Warray-like de forma (n_samples, n_components)
Si init=”custom”, se utiliza como conjetura inicial para la solución.
- Harray-like de forma (n_components, n_features)
Si init=”custom”, se utiliza como conjetura inicial para la solución.
- Devuelve
- Wndarray de forma (n_samples, n_components)
Datos transformados.
- get_params()¶
Obtener los parámetros de 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()¶
Transforma los datos de nuevo a su espacio original.
- Parámetros
- W{ndarray, sparse matrix} de forma (n_samples, n_components)
Matriz de datos transformada.
- Devuelve
- X{ndarray, sparse matrix} de forma (n_samples, n_features)
Matriz de datos de la forma original.
Nuevo en la versión 0.18: ..
- 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()¶
Transforma los datos X según el modelo NMF ajustado.
- Parámetros
- X{array-like, sparse matrix} de forma (n_samples, n_features)
La matriz de datos a transformar por el modelo.
- Devuelve
- Wndarray de forma (n_samples, n_components)
Datos transformados.