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 reconstruidos WH 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

fit

Aprende un modelo NMF para los datos X.

fit_transform

Aprende un modelo NMF para los datos X y devuelve los datos transformados.

get_params

Obtener los parámetros de este estimador.

inverse_transform

Transforma los datos de nuevo a su espacio original.

set_params

Establece los parámetros de este estimador.

transform

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.

Ejemplos utilizando sklearn.decomposition.NMF