nnmf

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

Описание

пример

[W,H] = nnmf(A,k) учитывает n-by-m матричный A в неотрицательные факторы W (n-by-k) и H K- 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' (мультипликативный алгоритм обновления).

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

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

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

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

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

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

Начальное значение HВ виде разделенной запятой пары, состоящей из 'H0' и k- 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 возражает тому же размеру как Параллельный пул. В противном случае задайте сингл 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- m матрица. k второй входной параметр nnmf, и m является количеством столбцов A.

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

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

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

Ссылки

[1] Ягода, Майкл В., Мюррей Браун, Эми Н. Лэнгвилл, В. Пол Пока и Роберт Дж. Племмонс. “Алгоритмы и Приложения для Аппроксимированной Неотрицательной Матричной Факторизации”. Computational Statistics & Data Analysis 52, № 1 (сентябрь 2007): 155–73. https://doi.org/10.1016/j.csda.2006.11.006.

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

Введенный в R2008a