Negatif olmayan matris ayrışımı yapay öğrenmede sıklıkla kullanılan $A$ matrisinin $W$ ve $H$ çarpanlarına ayrıştırıldığı yöntemdir. Öyle ki hem $A$ matrisi, hem de çarpanları negatif olmayan değerler içerir. Problem genellikle tam olarak çözülemediği için nümerik yaklaşımlar uygulanır.

MATLAB'de bu görevi istatistik araçkutusunda bulunan nnmf fonksiyonu görür. Gelin birlikte bu fonksiyonun kullanımına bakalım.

[W,H] = nnmf(A,k) negatif olmayan n x m'lik A matrisini negatif olmayan W (n x k'lik) ve H (k x m'lik) çarpanlarına ayırır. Ayrışım kesin değildir, W*H, A'nın bir yaklaşımıdır. W ve H, A ile W*H arasındaki D farkı enküçüklenecek şekilde seçilir.

D = sqrt(norm(A-W*H,'fro')/(N*M))

Fonksiyonun ayrıntılı kullanımı için buraya bakabilirsiniz.

Dokümantasyondaki örneğe bakalım. Öncelikle iki tane çarpanı kendimiz oluşturalım ve alttaki seçenekler ile nnmf'i çağıralım.

X = rand(100,20)*rand(20,50);
opt = statset('MaxIter',5,'Display','final'); % En çok 5 döngü olsun, son değer görünsün
[W0,H0] = nnmf(X,5,'replicates',10,...
                   'options',opt,...
                   'algorithm','mult');
    rep	   iteration	   rms resid	  |delta x|
      1	       5	    0.594972	   0.0498092
      2	       5	    0.619223	   0.0415817
      3	       5	    0.621558	   0.0380814
      4	       5	     0.63019	   0.0332496
      5	       5	    0.617562	   0.0366863
      6	       5	    0.646219	   0.0353345
      7	       5	    0.590388	   0.0332183
      8	       5	    0.590777	   0.0268213
      9	       5	    0.622133	    0.024451
     10	       5	    0.655387	    0.034738
Final root mean square residual = 0.590388

Sonra bulduğumuz sonuçları als (alternating least squares) algoritmasına girdi olarak verelim.

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	      28	    0.266558	  0.00385439
Final root mean square residual = 0.266558