Alternating Poisson Regression for fitting CP to sparse count data
Reference: E. C. Chi, T. G. Kolda, On Tensors, Sparsity, and Nonnegative Factorizations, SIAM J. Matrix Analysis and Applications, 33:1272-1299, 2012, https://doi.org/10.1137/110859063.
Contents
Set up a sample problem
We follow the general procedure outlined by Chi and Kolda (2013).
rng('default') %<- Setting random seed for reproducibility of this script % Pick the size and rank sz = [100 80 60]; R = 5; % Generate factor matrices with a few large entries in each column; this % will be the basis of our soln. A = cell(3,1); for n = 1:length(sz) A{n} = rand(sz(n), R); for r = 1:R p = randperm(sz(n)); nbig = round( (1/R)*sz(n) ); A{n}(p(1:nbig),r) = 100 * A{n}(p(1:nbig),r); end end lambda = rand(R,1); S = ktensor(lambda, A); S = normalize(S,'sort',1); % Create sparse test problem based on provided solution. nz = prod(sz) * .05; info = create_problem('Soln', S, 'Sparse_Generation', nz); % Extract data and solution X = info.Data; M_true = info.Soln;
Call CP-APR
% Compute a solution M = cp_apr(X, R, 'printitn', 10); % Score the solution factor_match_score = score(M, M_true, 'greedy', true)
CP_PQNR (alternating Poisson regression using quasi-Newton) Precomputing sparse index sets...done 10. Ttl Inner Its: 1576, KKT viol = 2.00e-01, obj = 1.43584130e+04, nz: 291 20. Ttl Inner Its: 336, KKT viol = 6.45e-03, obj = 1.25598428e+04, nz: 279 =========================================== Final log-likelihood = -1.255984e+04 Final least squares fit = 5.232259e-01 Final KKT violation = 9.5452289e-05 Total inner iterations = 36709 Total execution time = 4.78 secs factor_match_score = 0.9745