Nothing
#' Least Angle Regression, Lasso and Infinitesimal Forward Stagewise Models
#'
#' Fit variants of Lasso, and provide the entire sequence of coefficients and
#' fits, starting from zero to the least squares fit.
#'
#' @param type model type.
#' @param trace logical indicating whether status information is printed during
#' the fitting process.
#' @param normalize whether to standardize each variable to have unit L2 norm.
#' @param intercept whether to include an intercept in the model.
#' @param step algorithm step number to use for prediction. May be a decimal
#' number indicating a fractional distance between steps. If specified, the
#' maximum number of algorithm steps will be \code{ceiling(step)}; otherwise,
#' \code{step} will be set equal to the source package default maximum
#' [default: \code{max.steps}].
#' @param use.Gram whether to precompute the Gram matrix.
#'
#' @details
#' \describe{
#' \item{Response types:}{\code{numeric}}
#' \item{\link[=TunedModel]{Automatic tuning} of grid parameter:}{
#' \code{step}
#' }
#' }
#'
#' Default argument values and further model details can be found in the source
#' See Also link below.
#'
#' @return \code{MLModel} class object.
#'
#' @seealso \code{\link[lars]{lars}}, \code{\link{fit}}, \code{\link{resample}}
#'
#' @examples
#' \donttest{
#' ## Requires prior installation of suggested package lars to run
#'
#' fit(sale_amount ~ ., data = ICHomes, model = LARSModel)
#' }
#'
LARSModel <- function(
type = c("lasso", "lar", "forward.stagewise", "stepwise"), trace = FALSE,
normalize = TRUE, intercept = TRUE, step = numeric(), use.Gram = TRUE
) {
type <- match.arg(type)
MLModel(
name = "LARSModel",
label = "Least Angle Regression",
packages = "lars",
response_types = "numeric",
predictor_encoding = "model.matrix",
na.rm = TRUE,
params = new_params(environment()),
gridinfo = new_gridinfo(
param = "step",
get_values = c(
function(n, data, ...) seq_nvars(data, LARSModel, n)
)
),
fit = function(formula, data, weights, step = NULL, ...) {
x <- model.matrix(data, intercept = FALSE)
y <- response(data)
if (is.null(step)) {
res <- lars::lars(x, y, ...)
step <- length(res$df)
} else {
res <- lars::lars(x, y, max.steps = ceiling(step), ...)
step <- step
}
attr(res, ".MachineShop") <- list(step = step)
res
},
predict = function(object, newdata, .MachineShop, ...) {
newx <- model.matrix(newdata, intercept = FALSE)
predict(object, newx = newx, s = .MachineShop$step, type = "fit")$fit
}
)
}
MLModelFunction(LARSModel) <- NULL
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.