Implements matrix decomposition by the stochastic gradient descent optimization popularized by Simon Funk to minimize the error on the known values.
This function is used by the recommender method "SVDF" (see Recommender).
Usage
funkSVD(x, k = 10, gamma = 0.015, lambda = 0.001,
min_improvement = 1e-06, min_epochs = 50, max_epochs = 200,
verbose = FALSE)Arguments
- x
a matrix, potentially containing NAs.
- k
number of features (i.e, rank of the approximation).
- gamma
regularization term.
- lambda
learning rate.
- min_improvement
required minimum improvement per iteration.
- min_epochs
minimum number of iterations per feature.
- max_epochs
maximum number of iterations per feature.
- verbose
show progress.
Value
An object of class "funkSVD" with components
- U
the \(U\) matrix.
- V
the \(V\) matrix.
- parameters
a list with parameter values.
Details
Funk SVD decomposes a matrix (with missing values) into two components \(U\) and \(V\). The singular values are folded into these matrices. The approximation for the original matrix can be obtained by \(R = UV'\).
The predict method in this implementation folds in new data rows
by estimating the \(u\) vectors using gradient descent and then calculating
the reconstructed complete rating matrix for these users via \(r = uV'\).
References
Y. Koren, R. Bell, and C. Volinsky. Matrix Factorization Techniques for Recommender Systems, IEEE Computer, pp. 42-49, August 2009.
See also
Other internal:
internal
Examples
# this takes a while to run!
if (FALSE) { # \dontrun{
data("Jester5k")
# helper to calculate root mean squared error
rmse <- function(pred, truth) sqrt(sum((truth-pred)^2, na.rm = TRUE))
train <- as(Jester5k[1:100], "matrix")
fsvd <- funkSVD(train, verbose = TRUE)
# reconstruct the original rating matrix as R = UV'
r <- tcrossprod(fsvd$U, fsvd$V)
rmse(train, r)
# fold in new users for matrix completion
test <- as(Jester5k[101:105], "matrix")
p <- predict(fsvd, test, verbose = TRUE)
rmse(test, p)
} # }