Title: | Self-Tuning Data Adaptive Matrix Imputation |
---|---|
Description: | Implements the AdaptiveImpute matrix completion algorithm of 'Intelligent Initialization and Adaptive Thresholding for Iterative Matrix Completion', <https://amstat.tandfonline.com/doi/abs/10.1080/10618600.2018.1518238>. AdaptiveImpute is useful for embedding sparsely observed matrices, often out performs competing matrix completion algorithms, and self-tunes its hyperparameter, making usage easy. |
Authors: | Alex Hayes [aut, cre, cph] , Juhee Cho [aut], Donggyu Kim [aut], Karl Rohe [aut] |
Maintainer: | Alex Hayes <[email protected]> |
License: | MIT + file LICENSE |
Version: | 0.1.1.9001 |
Built: | 2024-10-25 05:18:06 UTC |
Source: | https://github.com/rohelab/fastadi |
adaptive_imputation
objects are a subclass of
LRMF3::svd_like()
, with an additional field alpha
.
adaptive_imputation(u, d, v, alpha, ...)
adaptive_imputation(u, d, v, alpha, ...)
u |
A matrix "left singular-ish" vectors. |
d |
A vector of "singular-ish" values. |
v |
A matrix of "right singular-ish" vectors. |
alpha |
Value of |
... |
Optional additional items to pass to the constructor. |
An adaptive_imputation
object.
An implementation of the AdaptiveImpute
algorithm for matrix completion
for sparse matrices.
adaptive_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), max_iter = 200L, check_interval = 1L, epsilon = 1e-07, additional = NULL ) ## S3 method for class 'sparseMatrix' adaptive_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), additional = NULL ) ## S3 method for class 'LRMF' adaptive_impute( X, rank, ..., epsilon = 1e-07, max_iter = 200L, check_interval = 1L )
adaptive_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), max_iter = 200L, check_interval = 1L, epsilon = 1e-07, additional = NULL ) ## S3 method for class 'sparseMatrix' adaptive_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), additional = NULL ) ## S3 method for class 'LRMF' adaptive_impute( X, rank, ..., epsilon = 1e-07, max_iter = 200L, check_interval = 1L )
X |
A sparse matrix of |
rank |
Desired rank (integer) to use in the low rank approximation.
Must be at least |
... |
Unused additional arguments. |
initialization |
How to initialize the low rank approximation. Options are:
Note that initialization matters as |
max_iter |
Maximum number of iterations to perform (integer). Defaults
to |
check_interval |
Integer specifying how often to perform convergence
checks. Defaults to |
epsilon |
Convergence criteria, measured in terms of relative change
in Frobenius norm of the full imputed matrix. Defaults to |
additional |
Ignored except when |
A low rank matrix factorization represented by an
adaptive_imputation()
object.
Cho, Juhee, Donggyu Kim, and Karl Rohe. “Asymptotic Theory for Estimating the Singular Vectors and Values of a Partially-Observed Low Rank Matrix with Noise.” Statistica Sinica, 2018. https://doi.org/10.5705/ss.202016.0205.
———. “Intelligent Initialization and Adaptive Thresholding for Iterative Matrix Completion: Some Statistical and Algorithmic Theory for Adaptive-Impute.” Journal of Computational and Graphical Statistics 28, no. 2 (April 3, 2019): 323–33. https://doi.org/10.1080/10618600.2018.1518238.
mf <- adaptive_impute(ml100k, rank = 3L, max_iter = 5L, check_interval = NULL) mf
mf <- adaptive_impute(ml100k, rank = 3L, max_iter = 5L, check_interval = NULL) mf
An implementation of the AdaptiveInitialize
algorithm for
matrix imputation for sparse matrices. At the moment the implementation
is only suitable for small matrices with on the order of thousands
of rows and columns at most.
adaptive_initialize( X, rank, ..., p_hat = NULL, alpha_method = c("exact", "approximate"), additional = NULL ) ## S3 method for class 'sparseMatrix' adaptive_initialize( X, rank, ..., p_hat = NULL, alpha_method = c("exact", "approximate"), additional = NULL )
adaptive_initialize( X, rank, ..., p_hat = NULL, alpha_method = c("exact", "approximate"), additional = NULL ) ## S3 method for class 'sparseMatrix' adaptive_initialize( X, rank, ..., p_hat = NULL, alpha_method = c("exact", "approximate"), additional = NULL )
X |
A sparse matrix of |
rank |
Desired rank (integer) to use in the low rank approximation.
Must be at least |
... |
Ignored. |
p_hat |
The portion of |
alpha_method |
Either |
additional |
Ignored except when |
A low rank matrix factorization represented by an
adaptive_imputation()
object.
mf <- adaptive_initialize( ml100k, rank = 3, alpha_method = "approximate", additional = 2 ) mf
mf <- adaptive_initialize( ml100k, rank = 3, alpha_method = "approximate", additional = 2 ) mf
An implementation of the AdaptiveImpute
algorithm using efficient
sparse matrix computations, specialized for the case when missing
values in the upper triangle are taken to be explicitly observed
zeros, as opposed to missing values. This is primarily
useful for spectral decompositions of adjacency matrices of graphs
with (near) tree structure, such as citation networks.
citation_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), max_iter = 200L, check_interval = 1L, epsilon = 1e-07, additional = NULL ) ## S3 method for class 'sparseMatrix' citation_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), additional = NULL ) ## S3 method for class 'LRMF' citation_impute( X, rank, ..., epsilon = 1e-07, max_iter = 200L, check_interval = 1L )
citation_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), max_iter = 200L, check_interval = 1L, epsilon = 1e-07, additional = NULL ) ## S3 method for class 'sparseMatrix' citation_impute( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), additional = NULL ) ## S3 method for class 'LRMF' citation_impute( X, rank, ..., epsilon = 1e-07, max_iter = 200L, check_interval = 1L )
X |
A square sparse matrix of |
rank |
Desired rank (integer) to use in the low rank approximation.
Must be at least |
... |
Unused additional arguments. |
initialization |
How to initialize the low rank approximation. Options are:
Note that initialization matters as |
max_iter |
Maximum number of iterations to perform (integer). Defaults
to |
check_interval |
Integer specifying how often to perform convergence
checks. Defaults to |
epsilon |
Convergence criteria, measured in terms of relative change
in Frobenius norm of the full imputed matrix. Defaults to |
additional |
Ignored except when |
If OpenMP is available, citation_impute
will automatically
use getOption("Ncpus", 1L)
OpenMP threads to parallelize some
key computations. Note that some computations are performed with
the Armadillo C++ linear algebra library and may also be parallelized
dependent on your BLAS and LAPACK installations and configurations.
A low rank matrix factorization represented by an
adaptive_imputation()
object.
# create a (binary) square sparse matrix to demonstrate on set.seed(887) n <- 10 A <- rsparsematrix(n, n, 0.1, rand.x = NULL) mf <- citation_impute(A, rank = 3L, max_iter = 1L, check_interval = NULL) mf
# create a (binary) square sparse matrix to demonstrate on set.seed(887) n <- 10 A <- rsparsematrix(n, n, 0.1, rand.x = NULL) mf <- citation_impute(A, rank = 3L, max_iter = 1L, check_interval = NULL) mf
An implementation of the AdaptiveImpute
algorithm using efficient
sparse matrix computations, specialized for the case when missing
values in the upper triangle are taken to be explicitly observed
zeros, as opposed to missing values. This is primarily
useful for spectral decompositions of adjacency matrices of graphs
with (near) tree structure, such as citation networks.
citation_impute2( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), max_iter = 200L, check_interval = 1L, epsilon = 1e-07, additional = NULL ) ## S3 method for class 'sparseMatrix' citation_impute2( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), additional = NULL ) ## S3 method for class 'LRMF' citation_impute2( X, rank, ..., epsilon = 1e-07, max_iter = 200L, check_interval = 1L )
citation_impute2( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), max_iter = 200L, check_interval = 1L, epsilon = 1e-07, additional = NULL ) ## S3 method for class 'sparseMatrix' citation_impute2( X, rank, ..., initialization = c("svd", "adaptive-initialize", "approximate"), additional = NULL ) ## S3 method for class 'LRMF' citation_impute2( X, rank, ..., epsilon = 1e-07, max_iter = 200L, check_interval = 1L )
X |
A square sparse matrix of |
rank |
Desired rank (integer) to use in the low rank approximation.
Must be at least |
... |
Unused additional arguments. |
initialization |
How to initialize the low rank approximation. Options are:
Note that initialization matters as |
max_iter |
Maximum number of iterations to perform (integer). Defaults
to |
check_interval |
Integer specifying how often to perform convergence
checks. Defaults to |
epsilon |
Convergence criteria, measured in terms of relative change
in Frobenius norm of the full imputed matrix. Defaults to |
additional |
Ignored except when |
If OpenMP is available, citation_impute
will automatically
use getOption("Ncpus", 1L)
OpenMP threads to parallelize some
key computations. Note that some computations are performed with
the Armadillo C++ linear algebra library and may also be parallelized
dependent on your BLAS and LAPACK installations and configurations.
A low rank matrix factorization represented by an
adaptive_imputation()
object.
# create a (binary) square sparse matrix to demonstrate on set.seed(887) n <- 1000 A <- rsparsematrix(n, n, 0.1, rand.x = NULL) * 1 A <- as(triu(A), "generalMatrix") mf <- citation_impute(A, rank = 50, max_iter = 10L, check_interval = NULL) mf mf2 <- citation_impute2(A, rank = 50L, max_iter = 10L, check_interval = NULL) mf2
# create a (binary) square sparse matrix to demonstrate on set.seed(887) n <- 1000 A <- rsparsematrix(n, n, 0.1, rand.x = NULL) * 1 A <- as(triu(A), "generalMatrix") mf <- citation_impute(A, rank = 50, max_iter = 10L, check_interval = NULL) mf mf2 <- citation_impute2(A, rank = 50L, max_iter = 10L, check_interval = NULL) mf2