cp-methods {DelayedTensor} | R Documentation

## Canonical Polyadic Decomposition

### Description

Canonical Polyadic (CP) decomposition of a tensor, aka CANDECOMP/PARAFRAC. Approximate a K-Tensor using a sum of `num_components` rank-1 K-Tensors. A rank-1 K-Tensor can be written as an outer product of K vectors. There are a total of `num_compoents *darr@num_modes` vectors in the output, stored in `darr@num_modes` matrices, each with `num_components` columns. This is an iterative algorithm, with two possible stopping conditions: either relative error in Frobenius norm has gotten below `tol`, or the `max_iter` number of iterations has been reached. For more details on CP decomposition, consult Kolda and Bader (2009).

### Usage

    cp(darr, num_components=NULL, max_iter=25, tol=1e-05)

    ## S4 method for signature 'DelayedArray'
    cp(darr, num_components, max_iter, tol)

### Arguments

`darr` | Tensor with K modes
`num_components` | the number of rank-1 K-Tensors to use in approximation
`max_iter` | maximum number of iterations if error stays above `tol`
`tol` | relative Frobenius norm error tolerance

### Details

This function is an extension of the `cp` by DelayedArray.

Uses the Alternating Least Squares (ALS) estimation procedure. A progress bar is included to help monitor operations on large tensors.

### Value

a list containing the following

`lambdas`

  a vector of normalizing constants, one for each component

`U`

  a list of matrices - one for each mode - each matrix with `num_components` columns

`conv`

  whether or not `resid` < `tol` by the last iteration

`norm_percent`

  the percent of Frobenius norm explained by the approximation

`est`

  estimate of `darr` after compression

`fnorm_resid`

  the Frobenius norm of the error `fnorm(est-darr)`

`all_resids`

  vector containing the Frobenius norm of error for all the iterations

### References

T. Kolda, B. Bader, "Tensor decomposition and applications". SIAM Applied Mathematics and Applications 2009.

### See Also

`tucker`

### Examples

    library("DelayedRandomArray")
    darr <- RandomUnifArray(c(3,4,5))
    cp(darr, num_components=2)

[Package DelayedTensor version 1.0.0 Index]