non_negative_factorization#
- sklearn.decomposition.non_negative_factorization(X, W=None, H=None, n_components='auto', *, init=None, update_H=True, solver='cd', beta_loss='frobenius', tol=0.0001, max_iter=200, alpha_W=0.0, alpha_H='same', l1_ratio=0.0, random_state=None, verbose=0, перемешивание=False)[источник]#
Вычислить неотрицательную матричную факторизацию (NMF).
Находит две неотрицательные матрицы (W, H), произведение которых аппроксимирует неотрицательную матрицу X. Эта факторизация может использоваться, например, для снижения размерности, разделения источников или извлечения тем.
Целевая функция:
\[ \begin{align}\begin{aligned}L(W, H) &= 0.5 * ||X - WH||_{loss}^2\\ &+ alpha\_W * l1\_ratio * n\_features * ||vec(W)||_1\\ &+ alpha\_H * l1\_ratio * n\_samples * ||vec(H)||_1\\ &+ 0.5 * alpha\_W * (1 - l1\_ratio) * n\_features * ||W||_{Fro}^2\\ &+ 0.5 * alpha\_H * (1 - l1\_ratio) * n\_samples * ||H||_{Fro}^2,\end{aligned}\end{align} \]где \(||A||_{Fro}^2 = \sum_{i,j} A_{ij}^2\) (норма Фробениуса) и \(||vec(A)||_1 = \sum_{i,j} abs(A_{ij})\) (Elementwise L1 norm)
Общая норма \(||X - WH||_{loss}^2\) может представлять норму Фробениуса или другую поддерживаемую бета-дивергенцию. Выбор между вариантами контролируется параметром
beta_lossпараметр.Регуляризационные члены масштабируются на
n_featuresдляWи с помощьюn_samplesдляHчтобы сбалансировать их влияние друг относительно друга и относительно члена соответствия данным как можно более независимо от размераn_samplesобучающей выборки.Целевая функция минимизируется с помощью чередующейся минимизации W и H. Если H задано и update_H=False, решается только для W.
Обратите внимание, что преобразованные данные называются W, а матрица компонентов называется H. В литературе по NMF соглашение об именовании обычно обратное, поскольку матрица данных X транспонирована.
- Параметры:
- X{array-like, sparse matrix} формы (n_samples, n_features)
Постоянная матрица.
- Warray-like формы (n_samples, n_components), default=None
Если
init='custom', он используется как начальное предположение для решения. Еслиupdate_H=False, он инициализируется как массив нулей, если толькоsolver='mu', затем заполняется значениями, рассчитанными с помощьюnp.sqrt(X.mean() / self._n_components). ЕслиNone, использует метод инициализации, указанный вinit.- Harray-like формы (n_components, n_features), по умолчанию=None
Если
init='custom', он используется как начальное предположение для решения. Еслиupdate_H=False, он используется как константа для решения только для W. ЕслиNone, использует метод инициализации, указанный вinit.- n_componentsint или {‘auto’} или None, по умолчанию=’auto’
менее 30 или около того),
None, все признаки сохраняются. Еслиn_components='auto', количество компонентов автоматически выводится изWилиHформы.Изменено в версии 1.4: Добавлен
'auto'значение.Изменено в версии 1.6: Значение по умолчанию изменено с
Noneto'auto'.- init{‘random’, ‘nndsvd’, ‘nndsvda’, ‘nndsvdar’, ‘custom’}, по умолчанию=None
Метод, используемый для инициализации процедуры.
Допустимые опции:
None: 'nndsvda', если n_components < n_features, иначе 'random'.
'random': неотрицательные случайные матрицы, масштабированные с:
sqrt(X.mean() / n_components)‘nndsvd’: Инициализация методом неотрицательного двойного сингулярного разложения (NNDSVD) (лучше для разреженности)
'nndsvda': NNDSVD с нулями, заполненными средним значением X (лучше, когда разреженность нежелательна)
'nndsvdar': NNDSVD с нулями, заполненными небольшими случайными значениями (обычно более быстрая, менее точная альтернатива NNDSVDa для случаев, когда разреженность нежелательна)
'custom': Если
update_H=True, использовать пользовательские матрицы W и H, которые должны быть предоставлены. Еслиupdate_H=False, тогда используется только пользовательская матрица H.
Изменено в версии 0.23: Значение по умолчанию для
initизменено с 'random' на None в версии 0.23.Изменено в версии 1.1: Когда
init=Noneи n_components меньше n_samples и n_features по умолчанию равноnndsvdaвместоnndsvd.- update_Hbool, по умолчанию=True
Установите True, и W, и H будут оценены из начальных предположений. Установите False, будет оценен только W.
- solver{'cd', 'mu'}, по умолчанию='cd'
Численный решатель для использования:
‘cd’ — это решатель Coordinate Descent, использующий Fast Hierarchical Alternating Least Squares (Fast HALS).
‘mu’ — решатель мультипликативного обновления.
Добавлено в версии 0.17: Решатель Coordinate Descent.
Добавлено в версии 0.19: решатель Multiplicative Update.
- beta_lossfloat или {'frobenius', 'kullback-leibler', 'itakura-saito'}, по умолчанию='frobenius'
Бета-дивергенция для минимизации, измеряющая расстояние между X и произведением WH. Заметим, что значения, отличные от 'frobenius' (или 2) и 'kullback-leibler' (или 1), приводят к значительно более медленной подгонке. Заметим, что при beta_loss <= 0 (или 'itakura-saito') входная матрица X не может содержать нули. Используется только в решателе 'mu'.
Добавлено в версии 0.19.
- tolfloat, по умолчанию=1e-4
Допуск условия остановки.
- max_iterint, default=200
Максимальное количество итераций до таймаута.
- alpha_Wfloat, по умолчанию=0.0
Константа, умножающая члены регуляризации
W. Установите значение ноль (по умолчанию), чтобы не было регуляризации наW.Добавлено в версии 1.0.
- alpha_Hfloat или "same", по умолчанию="same"
Константа, умножающая члены регуляризации
H. Установите его в ноль, чтобы не иметь регуляризации наH. Если "same" (по умолчанию), принимает то же значение, что иalpha_W.Добавлено в версии 1.0.
- l1_ratiofloat, по умолчанию=0.0
Параметр смешивания регуляризации, где 0 <= l1_ratio <= 1. Для l1_ratio = 0 штраф является поэлементным L2-штрафом (также известным как норма Фробениуса). Для l1_ratio = 1 это поэлементный L1-штраф. Для 0 < l1_ratio < 1 штраф представляет собой комбинацию L1 и L2.
- random_stateint, экземпляр RandomState или None, по умолчанию=None
Используется для инициализации NMF (когда
init== 'nndsvdar' или 'random'), и в методе координатного спуска. Передайте целое число для воспроизводимых результатов при многократных вызовах функции. См. Глоссарий.- verboseint, по умолчанию=0
Уровень подробности вывода.
- перемешиваниеbool, по умолчанию=False
Если истинно, рандомизировать порядок координат в решателе CD.
- Возвращает:
- Wndarray формы (n_samples, n_components)
Решение задачи неотрицательных наименьших квадратов.
- Hndarray формы (n_components, n_features)
Решение задачи неотрицательных наименьших квадратов.
- n_iterint
Фактическое количество итераций.
Ссылки
[1]“Fast local algorithms for large scale nonnegative matrix and tensor factorizations” Cichocki, Andrzej, and P. H. A. N. Anh-Huy. IEICE transactions on fundamentals of electronics, communications and computer sciences 92.3: 708-721, 2009.
[2]“Алгоритмы для неотрицательного матричного разложения с бета-дивергенцией” Fevotte, C., & Idier, J. (2011). Neural Computation, 23(9).
Примеры
>>> 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)