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
. Siupdate_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)