sklearn.decomposition.non_negative_factorization

sklearn.decomposition.non_negative_factorization()

Calcula la Matriz de Factorización no-negativa (NMF).

Encuentra dos matrices no negativas (W, H) cuyo producto se aproxima 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 = \su_{i,j} A_{ij}^2\) (Norma de Frobenius)

\(||vec(A)||_1 = \sum_{i,j} abs(A_{ij})\) (Norma Elemental 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 alternativa de W y H. Si se da H y update_H=False, se resuelve sólo para W.

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

Matriz constante.

Warray-like de forma (n_samples, n_components), default=None

Si init=”custom”, se utiliza como conjetura inicial para la solución.

Harray-like de forma (n_components, n_features), default=None

Si init=”custom”, se utiliza como conjetura inicial para la solución. Si update_H=False, se utiliza como una constante, para resolver sólo W.

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.

Opciones válidas:

  • None: “nndsvd” si n_components < n_features, en caso contrario “random”.

  • “random”: matrices aleatorias no negativas, escaladas con:

    sqrt(X.mean() / n_components)

  • “nndsvd”: Descomposición del valor singular doble no negativo (Nonnegative Double Singular Value Decomposition NNDSVD)

    inicialización (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 de pequeños valores aleatorios

    (alternativa generalmente más rápida y menos precisa a la NNDSVDa para cuando no se desea la dispersión)

  • “custom”: utilizar las matrices personalizadas W y H si update_H=True. Si update_H=False, entonces sólo se utiliza la matriz personalizada H.

Distinto en la versión 0.23: El valor predeterminado de init cambió de “random” a None en 0.23.

update_Hbool, default=True

Si se establece en True, tanto W como H se estimarán a partir de las conjeturas iniciales. Si se establece en False, sólo se estimará W.

solver{“cd”, “mu”}, default=”cd”

Solucionador numérico a utilizar:

  • “cd” es un solucionador de Descenso de Coordenadas que utiliza la Jerarquía Rápida

    Mínimos cuadrados alternativos (HALS rápido).

  • “mu” es un solucionador de Actualización Multiplicativa.

Nuevo en la versión 0.17: Solucionador de Descenso de Coordenadas.

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.

alphafloat, default=0.

Constante que multiplica los términos de regularización.

l1_ratiofloat, default=0.

El parámetro de mezcla de regularización, con 0 <= l1_ratio <= 1. Para l1_ratio = 0 la penalización es una penalización L2 por elementos (también conocida como Norma de Frobenius). Para l1_ratio = 1 es una penalización L1 por elementos. Para 0 < l1_ratio < 1, la penalización es una combinación de L1 y L2.

regularization{“both”, “components”, “transformation”}, default=None

Selecciona si la regularización afecta a los componentes (H), a la transformación (W), a ambos o a ninguno de ellos.

random_stateentero, instancia de RandomState o None, default=None

Se utiliza para la inicialización del NMF (cuando init == “nndsvdar” o “random”), y en el Descenso de Coordenadas. Pasa un entero(int) para obtener resultados reproducibles a través de múltiples llamadas a la función. Ver Glosario.

verboseint, default=0

El nivel de verbosidad.

shufflebool, default=False

Si es True, aleatoriza el orden de las coordenadas en el solucionador de CD.

Devuelve
Wndarray de forma (n_samples, n_components)

Solución al problema de mínimos cuadrados no negativos.

Hndarray de forma (n_components, n_features)

Solución al problema de mínimos cuadrados no negativos.

n_iterint

Número real de iteraciones.

Referencias

Cichocki, Andrzej, y 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 non_negative_factorization
>>> W, H, n_iter = non_negative_factorization(X, n_components=2,
... init='random', random_state=0)