|
| Numeric.LinearAlgebra.Array.Decomposition | | Stability | provisional | | Maintainer | Alberto Ruiz <aruiz@um.es> |
|
|
|
|
|
| Description |
| Common multidimensional array decompositions. See the paper by Kolda & Balder.
|
|
| Synopsis |
|
|
|
|
| HOSVD
|
|
|
Multilinear Singular Value Decomposition (or Tucker's method, see Lathauwer et al.).
The result is a list with the core (head) and rotations so that
t == product (hsvd t).
The core and the rotations are truncated to the rank of each mode.
Use hosvd' to get full transformations and rank information about each mode.
|
|
|
Full version of hosvd.
The first element in the result pair is a list with the core (head) and rotations so that
t == product (fst (hsvd' t)).
The second element is a list of rank and singular values along each mode,
to give some idea about core structure.
|
|
|
| Truncate a hosvd decomposition from the desired number of principal components in each dimension.
|
|
| CP
|
|
|
| :: Int -> [Array Double] | Initialization function for each rank
| | -> ALSParam None Double | optimization parameters
| | -> Array Double | input array
| | -> [Array Double] | factors
| Experimental implementation of the CP decomposition, based on alternating
least squares. We try approximations of increasing rank, until the relative reconstruction error is below a desired percent of Frobenius norm (epsilon).
The approximation of rank k is abandoned if the error does not decrease at least delta% in an iteration.
Practical usage can be based on something like this:
cp finit d e t = cpAuto (finit t) defaultParameters {delta = d, epsilon = e} t
cpS = cp (InitSvd . fst . hosvd')
cpR s = cp (cpInitRandom s)
So we can write
-- initialization based on hosvd
y = cpS 0.01 1E-6 t
-- (pseudo)random initialization
z = cpR seed 0.1 0.1 t
|
|
|
|
| :: [Array Double] | starting point
| | -> ALSParam None Double | optimization parameters
| | -> Array Double | input array
| | -> ([Array Double], [Double]) | factors and error history
| Basic CP optimization for a given rank. The result includes the obtained sequence of errors.
For example, a rank 3 approximation can be obtained as follows, where initialization
is based on the hosvd:
(y,errs) = cpRank 3 t
where cpRank r t = cpRun (cpInitSvd (fst $ hosvd' t) r) defaultParameters t
|
|
|
|
| :: Int | seed
| | -> NArray i t | target array to decompose
| | -> Int | rank
| | -> [NArray None Double] | random starting point
| | pseudorandom cp initialization from a given seed
|
|
|
|
|
|
| Utilities
|
|
|
| optimization parameters for alternating least squares
| | Constructors | | ALSParam | | | nMax :: Int | maximum number of iterations
| | delta :: Double | minimum relative improvement in the optimization (percent, e.g. 0.1)
| | epsilon :: Double | maximum relative error. For nonhomogeneous problems it is
the reconstruction error in percent (e.g.
1E-3), and for homogeneous problems is the frobenius norm of the
expected zero structure in the right hand side.
| | post :: [NArray i t] -> [NArray i t] | post-processing function after each full iteration (e.g. id)
| | postk :: Int -> NArray i t -> NArray i t | post-processing function for the k-th argument (e.g. const id)
| | presys :: Matrix t -> Matrix t | preprocessing function for the linear systems (eg. id, or infoRank)
|
|
|
|
|
|
| nMax = 20, epsilon = 1E-3, delta = 1, post = id, postk = const id, presys = id
|
|
| Produced by Haddock version 2.6.1 |