nnmf

Неотрицательная матричная факторизация

Описание

пример

[W,H] = nnmf(A,k) множители, n -by m матрица A в неотрицательные факторы W (n -by- k) и H (k-by- m). Факторизация не точна; W*H является более низкоранговым приближением к A. Факторы W и H минимизируйте среднее корневое квадратное остаточное D между A и W*H.

D = norm(A - W*H,'fro')/sqrt(n*m)

Факторизация использует итерационный алгоритм, начиная со случайных начальных значений для W и H. Потому что корневое среднее квадратное остаточное D может иметь локальные минимумы, повторные факторизации могут привести к различным W и H. Иногда алгоритм сходится к решению более низкого ранга, чем k, что может указать, что результат не оптимален.

пример

[W,H] = nnmf(A,k,Name,Value) изменяет факторизацию с помощью одного или нескольких аргументов пары "имя-значение". Для примера можно запросить повторные факторизации путем установки 'Replicates' в целое число значения больше 1.

[W,H,D] = nnmf(___) также возвращает среднеквадратичную невязку D использование любой комбинации входных аргументов в предыдущих синтаксисах.

Примеры

свернуть все

Загрузите выборочные данные.

load fisheriris

Вычислите неотрицательное приближение двух рангов измерений четырех переменных в данных радужной оболочки глаза Фишера.

rng(1) % For reproducibility
[W,H] = nnmf(meas,2);
H
H = 2×4

    0.6945    0.2856    0.6220    0.2218
    0.8020    0.5683    0.1834    0.0149

Первая и третья переменные в meas (длина сепаля и длина лепестка, с коэффициентами 0,6945 и 0,6220 соответственно) обеспечивают относительно сильные веса для первого столбца W . Первая и вторая переменные в meas (длина сепаля и ширина сепаля с коэффициентами 0,8020 и 0,5683 соответственно) обеспечивают относительно сильные веса для второго столбца W .

Создайте biplot данных и переменных в meas в пространстве столбцов W .

biplot(H','Scores',W,'VarLabels',{'sl','sw','pl','pw'});
axis([0 1.1 0 1.1])
xlabel('Column 1')
ylabel('Column 2')

Figure contains an axes. The axes contains 163 objects of type line, text.

Начиная со случайного X массива с рангом 20 попробуйте несколько итераций при нескольких повторениях с помощью мультипликативного алгоритма.

rng default % For reproducibility
X = rand(100,20)*rand(20,50);
opt = statset('MaxIter',5,'Display','final');
[W0,H0] = nnmf(X,5,'Replicates',10,...
                   'Options',opt,...
                   'Algorithm','mult');
    rep	   iteration	   rms resid	  |delta x|
      1	       5	    0.560887	   0.0245182
      2	       5	     0.66418	   0.0364471
      3	       5	    0.609125	   0.0358355
      4	       5	    0.608894	   0.0415491
      5	       5	    0.619291	   0.0455135
      6	       5	    0.621549	   0.0299965
      7	       5	    0.640549	   0.0438758
      8	       5	    0.673015	   0.0366856
      9	       5	    0.606835	   0.0318931
     10	       5	    0.633526	   0.0319591
Final root mean square residual = 0.560887

Продолжите больше итераций из лучших из этих результатов, используя чередование наименьших квадратов.

opt = statset('Maxiter',1000,'Display','final');
[W,H] = nnmf(X,5,'W0',W0,'H0',H0,...
                 'Options',opt,...
                 'Algorithm','als');
    rep	   iteration	   rms resid	  |delta x|
      1	      24	    0.257336	  0.00271859
Final root mean square residual = 0.257336

Входные параметры

свернуть все

Матрица для факторизации, заданная как действительная матрица.

Пример: rand(20,30)

Типы данных: single | double

Ранг факторов, заданный как положительное целое число. Результирующие факторы W и H иметь k столбцы и строки, соответственно.

Пример: 3

Типы данных: single | double

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: [W,H] = nnmf(A,k,'Algorithm','mult','Replicates',10) выбирает алгоритм мультипликативного обновления и десять повторений, чтобы улучшить результат

Алгоритм факторизации, заданный как разделенная разделенными запятой парами, состоящая из 'Algorithm' и 'als' (переменные наименьшие квадраты) или 'mult' (алгоритм мультипликативного обновления).

The 'als' алгоритм обычно является более стабильным и сходится в меньшем количестве итераций. Каждая итерация занимает больше времени. Поэтому максимум по умолчанию составляет 50, что обычно дает удовлетворительные результаты во внутренней проверке.

The 'mult' алгоритм обычно имеет более быстрые итерации и требует большего их количества. Максимальный по умолчанию является 100. Этот алгоритм, как правило, более чувствителен к стартовым значениям и, поэтому, по-видимому, больше выигрывает от выполнения нескольких репликаций.

Пример: 'Algorithm','mult'

Типы данных: char | string

Начальное значение W, заданная как разделенная разделенными запятой парами, состоящая из 'W0' и n -by- k матрица, где n - количество строк A, и k является вторым входным параметром nnmf.

Типы данных: single | double

Начальное значение H, заданная как разделенная разделенными запятой парами, состоящая из 'H0' и a k-by - m матрица, где k является вторым входным параметром nnmf, и m количество столбцов A.

Типы данных: single | double

Опции алгоритма, заданные как разделенная разделенными запятой парами, состоящая из 'Options' и структуру, возвращаемую statset функция. nnmf использует следующие поля структуры опций.

ОбластьОписаниеЗначения
DisplayУровень итерационного отображения
  • 'off' (по умолчанию) - Нет отображения

  • 'final' - отображение конечного результата

  • 'iter' - Итерационное отображение промежуточных результатов

MaxIterМаксимальное количество итерацийПоложительное целое число. Значение по умолчанию является 50 для 'als' алгоритм и 100 для 'mult' алгоритм. В отличие от настроек оптимизации, достижение MaxIter итерации рассматриваются как сходимость.
TolFunДопуск на прекращение изменения размера невязкиНеотрицательное значение. Значение по умолчанию является 1e-4.
TolXДопуск прекращения на относительное изменение элементов W и HНеотрицательное значение. Значение по умолчанию является 1e-4.
UseParallelИндикация для параллельного вычисленияЛогическое значение. Значение по умолчанию false указывает на отсутствие параллельных вычислений и true указывает, что вычисление выполняется параллельно. Для параллельных вычислений требуется лицензия Parallel Computing Toolbox™.
UseSubstreamsТип воспроизводимости при параллельных вычислениях
  • false (по умолчанию) - Не вычислять воспроизводимо

  • 'mlfg6331_64'

  • 'mrg32k3a'

Для получения дополнительной информации смотрите Воспроизводимость в параллельных статистических расчетах.

StreamsA RandStream объект или массив ячеек таких объектов
  • Если вы не задаете Streams, nnmf использует поток по умолчанию или потоки.

  • Если UseParallel является true и UseSubstreams является false, задайте массив ячеек RandStream объекты того же размера, что и пул Parallel. В противном случае задайте одну RandStream объект.

Пример: 'Options',statset('Display','iter','MaxIter',50)

Типы данных: struct

Количество раз, чтобы повторить факторизацию, заданное как разделенная разделенными запятой парами, состоящая из 'Replicates' и положительное целое число. Алгоритм выбирает новые случайные стартовые значения для W и H при каждой репликации, кроме первой репликации, если вы задаете 'W0' и 'H0'. Если вы задаете значение, больше 1, можно получить лучшие результаты путем установки Algorithm на 'mult'. См. «Алгоритм изменения».

Пример: 10

Типы данных: single | double

Выходные аргументы

свернуть все

Неотрицательный левый фактор A, возвращается как n -by- k матрица. n - количество строк A, и k является вторым входным параметром nnmf.

W и H нормированы так, что строки H иметь единичную длину. Столбцы W упорядочены путем уменьшения длины.

Неотрицательный правый коэффициент A, возвращается как k-by - m матрица. k является вторым входным параметром nnmf, и m количество столбцов A.

W и H нормированы так, что строки H иметь единичную длину. Столбцы W упорядочены путем уменьшения длины.

Среднее значение корня квадратная невязка, возвращаемое как неотрицательный скаляр.

D = norm(A - W*H,'fro')/sqrt(n*m)

Ссылки

[1] Берри, Майкл У., Мюррей Браун, Эми Н. Лэнгвилл, В. Пол Паука и Роберт Дж. Племмонс. «Алгоритмы и приложения для аппроксимации неотрицательной матричной факторизации». Вычислительная статистика и анализ данных 52, № 1 (сентябрь 2007 года): 155-73. https://doi.org/10.1016/j.csda.2006.11.006.

Расширенные возможности

Введенный в R2008a