# Alternating Poisson Regression for fitting CP to sparse count data

## Contents

- Set up a sample problem
- Call CP-APR

## Set up a sample problem

We follow the general procedure outlined by E. C. Chi and T. G. Kolda, On Tensors, Sparsity, and Nonnegative Factorizations, arXiv:1112.2414 [math.NA], December 2011 (http://arxiv.org/abs/1112.2414).

    % 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_APR:
     Iter   10: Inner Its = 30 KKT violation = 7.602374e-002, nViolations =  0
     Iter   20: Inner Its = 30 KKT violation = 5.132380e-002, nViolations =  0
     Iter   30: Inner Its = 30 KKT violation = 5.515916e-004, nViolations =  0
    ===========================================
     Final log-likelihood = -8.281889e+003
     Final least squares fit = 5.784579e-001
     Final KKT violation = 9.9202395e-005
     Total inner iterations = 1034

    factor_match_score =

        0.9610