Этот пример показывает, как выполнить неотрицательную матричную факторизацию.
Загрузите выборочные данные.
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')