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: Значение по умолчанию изменено с None to '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.

Примеры

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