exponenta event banner

Выполнение факторизации неотрицательной матрицы

В этом примере показано, как выполнить факторизацию неотрицательной матрицы.

Загрузите образцы данных.

load moore
X = moore(:,1:5);
rng('default'); % For reproducibility

Вычислить аппроксимацию ранга-два X использование мультипликативного алгоритма обновления, начинающегося с пяти случайных начальных значений для W и H.

opt = statset('MaxIter',10,'Display','final');
[W0,H0] = nnmf(X,2,'replicates',5,'options',opt,'algorithm','mult');
    rep	   iteration	   rms resid	  |delta x|
      1	      10	     358.296	  0.00190554
      2	      10	     78.3556	 0.000351747
      3	      10	     230.962	   0.0172839
      4	      10	     326.347	  0.00739552
      5	      10	     361.547	  0.00705539
Final root mean square residual = 78.3556

'mult' алгоритм чувствителен к начальным значениям, что делает его хорошим выбором при использовании 'replicates' найти W и H из нескольких случайных начальных значений.

Теперь выполняйте факторизацию с помощью алгоритма чередования наименьших квадратов, который сходится быстрее и более последовательно. Выполнить в 100 раз больше итераций, начиная с начальной W0 и H0 указано выше.

opt = statset('Maxiter',1000,'Display','final');
[W,H] = nnmf(X,2,'w0',W0,'h0',H0,'options',opt,'algorithm','als');
    rep	   iteration	   rms resid	  |delta x|
      1	       2	     77.5315	 0.000830334
Final root mean square residual = 77.5315

Два столбца W являются преобразованными предикторами. Два ряда H дать относительный вклад каждого из пяти предикторов в X к предикторам в W. Дисплей H.

H
H = 2×5

    0.0835    0.0190    0.1782    0.0072    0.9802
    0.0559    0.0250    0.9969    0.0085    0.0497

Пятый предиктор в X (вес 0,9802) сильно влияет на первый предиктор в W. Третий предиктор в X (вес 0,9969) сильно влияет на второй предиктор в W.

Визуализация относительного вклада предикторов в X с biplot, показывая данные и исходные переменные в пространстве столбцов W.

biplot(H','scores',W,'varlabels',{'','','v3','','v5'});
axis([0 1.1 0 1.1])
xlabel('Column 1')
ylabel('Column 2')

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

См. также

Связанные темы