diff options
Diffstat (limited to 'R/gensvm.R')
| -rw-r--r-- | R/gensvm.R | 79 |
1 files changed, 40 insertions, 39 deletions
@@ -1,40 +1,41 @@ #' @title Fit the GenSVM model #' -#' @description Fits the Generalized Multiclass Support Vector Machine model -#' with the given parameters. See the package documentation +#' @description Fits the Generalized Multiclass Support Vector Machine model +#' with the given parameters. See the package documentation #' (\code{\link{gensvm-package}}) for more general information about GenSVM. #' #' @param x data matrix with the predictors. \cr\cr -#' Note that for SVMs categorical features should be converted to binary dummy -#' features. This can be done with using the \code{\link{model.matrix}} +#' Note that for SVMs categorical features should be converted to binary dummy +#' features. This can be done with using the \code{\link{model.matrix}} #' function (i.e. \code{model.matrix( ~ var - 1)}). #' @param y class labels #' @param p parameter for the L_p norm of the loss function (1.0 <= p <= 2.0) #' @param lambda regularization parameter for the loss function (lambda > 0) -#' @param kappa parameter for the hinge function in the loss function (kappa > +#' @param kappa parameter for the hinge function in the loss function (kappa > #' -1.0) -#' @param weights type of instance weights to use. Options are 'unit' for unit -#' weights and 'group' for group size correction weight (eq. 4 in the paper). -#' @param kernel the kernel type to use in the classifier. It must be one of -#' 'linear', 'poly', 'rbf', or 'sigmoid'. See the section "Kernels in GenSVM" +#' @param weights type or vector of instance weights to use. Options are 'unit' +#' for unit weights and 'group' for group size correction weights (eq. 4 in the +#' paper). Alternatively, a vector of weights can be provided. +#' @param kernel the kernel type to use in the classifier. It must be one of +#' 'linear', 'poly', 'rbf', or 'sigmoid'. See the section "Kernels in GenSVM" #' in \code{\link{gensvm-package}} for more info. -#' @param gamma kernel parameter for the rbf, polynomial, and sigmoid kernel. +#' @param gamma kernel parameter for the rbf, polynomial, and sigmoid kernel. #' If gamma is 'auto', then 1/n_features will be used. #' @param coef parameter for the polynomial and sigmoid kernel. #' @param degree parameter for the polynomial kernel -#' @param kernel.eigen.cutoff Cutoff point for the reduced eigendecomposition -#' used with kernel-GenSVM. Eigenvectors for which the ratio between their -#' corresponding eigenvalue and the largest eigenvalue is smaller than this +#' @param kernel.eigen.cutoff Cutoff point for the reduced eigendecomposition +#' used with kernel-GenSVM. Eigenvectors for which the ratio between their +#' corresponding eigenvalue and the largest eigenvalue is smaller than this #' cutoff value will be dropped. #' @param verbose Turn on verbose output and fit progress -#' @param random.seed Seed for the random number generator (useful for +#' @param random.seed Seed for the random number generator (useful for #' reproducible output) #' @param max.iter Maximum number of iterations of the optimization algorithm. -#' @param seed.V Matrix to warm-start the optimization algorithm. This is -#' typically the output of \code{coef(fit)}. Note that this function will +#' @param seed.V Matrix to warm-start the optimization algorithm. This is +#' typically the output of \code{coef(fit)}. Note that this function will #' silently drop seed.V if the dimensions don't match the provided data. #' -#' @return A "gensvm" S3 object is returned for which the print, predict, coef, +#' @return A "gensvm" S3 object is returned for which the print, predict, coef, #' and plot methods are available. It has the following items: #' \item{call}{The call that was used to construct the model.} #' \item{p}{The value of the lp norm in the loss function} @@ -46,7 +47,7 @@ #' \item{gamma}{The value of the gamma parameter of the kernel, if applicable} #' \item{coef}{The value of the coef parameter of the kernel, if applicable} #' \item{degree}{The degree of the kernel, if applicable} -#' \item{kernel.eigen.cutoff}{The cutoff value of the reduced +#' \item{kernel.eigen.cutoff}{The cutoff value of the reduced #' eigendecomposition of the kernel matrix.} #' \item{verbose}{Whether or not the model was fitted with progress output} #' \item{random.seed}{The random seed used to seed the model.} @@ -61,7 +62,7 @@ #' \item{training.time}{Total training time} #' #' @note -#' This function returns partial results when the computation is interrupted by +#' This function returns partial results when the computation is interrupted by #' the user. #' #' @author @@ -69,12 +70,12 @@ #' Maintainer: Gerrit J.J. van den Burg <gertjanvandenburg@gmail.com> #' #' @references -#' Van den Burg, G.J.J. and Groenen, P.J.F. (2016). \emph{GenSVM: A Generalized -#' Multiclass Support Vector Machine}, Journal of Machine Learning Research, +#' Van den Burg, G.J.J. and Groenen, P.J.F. (2016). \emph{GenSVM: A Generalized +#' Multiclass Support Vector Machine}, Journal of Machine Learning Research, #' 17(225):1--42. URL \url{http://jmlr.org/papers/v17/14-526.html}. #' #' @seealso -#' \code{\link{coef}}, \code{\link{print}}, \code{\link{predict}}, +#' \code{\link{coef}}, \code{\link{print}}, \code{\link{predict}}, #' \code{\link{plot}}, \code{\link{gensvm.grid}}, \code{\link{gensvm-package}} #' #' @export @@ -109,9 +110,9 @@ #' all.equal(coef(fit), coef(fit2)) #' #' -gensvm <- function(X, y, p=1.0, lambda=1e-8, kappa=0.0, epsilon=1e-6, - weights='unit', kernel='linear', gamma='auto', coef=1.0, - degree=2.0, kernel.eigen.cutoff=1e-8, verbose=FALSE, +gensvm <- function(x, y, p=1.0, lambda=1e-8, kappa=0.0, epsilon=1e-6, + weights='unit', kernel='linear', gamma='auto', coef=1.0, + degree=2.0, kernel.eigen.cutoff=1e-8, verbose=FALSE, random.seed=NULL, max.iter=1e8, seed.V=NULL) { call <- match.call() @@ -121,13 +122,13 @@ gensvm <- function(X, y, p=1.0, lambda=1e-8, kappa=0.0, epsilon=1e-6, return(invisible(NULL)) } - # Generate the random.seed value in R if it is NULL. This way users can + # Generate the random.seed value in R if it is NULL. This way users can # reproduce the run because it is returned in the output object. if (is.null(random.seed)) random.seed <- runif(1) * (2**31 - 1) - n.objects <- nrow(X) - n.features <- ncol(X) + n.objects <- nrow(x) + n.features <- ncol(x) n.classes <- length(unique(y)) # Convert labels to integers @@ -154,7 +155,7 @@ gensvm <- function(X, y, p=1.0, lambda=1e-8, kappa=0.0, epsilon=1e-6, # Call the C train routine out <- .Call("R_gensvm_train", - as.matrix(X), + data.matrix(x), as.integer(y.clean), p, lambda, @@ -177,16 +178,16 @@ gensvm <- function(X, y, p=1.0, lambda=1e-8, kappa=0.0, epsilon=1e-6, as.integer(n.classes)) # build the output object - object <- list(call = call, p = p, lambda = lambda, kappa = kappa, - epsilon = epsilon, weights = weights, kernel = kernel, - gamma = gamma, coef = coef, degree = degree, - kernel.eigen.cutoff = kernel.eigen.cutoff, - verbose = verbose, random.seed = random.seed, - max.iter = max.iter, n.objects = n.objects, - n.features = n.features, n.classes = n.classes, - classes = classes, V = out$V, n.iter = out$n.iter, - n.support = out$n.support, - training.time = out$training.time, + object <- list(call = call, p = p, lambda = lambda, kappa = kappa, + epsilon = epsilon, weights = weights, kernel = kernel, + gamma = gamma, coef = coef, degree = degree, + kernel.eigen.cutoff = kernel.eigen.cutoff, + verbose = verbose, random.seed = random.seed, + max.iter = max.iter, n.objects = n.objects, + n.features = n.features, n.classes = n.classes, + classes = classes, V = out$V, n.iter = out$n.iter, + n.support = out$n.support, + training.time = out$training.time) class(object) <- "gensvm" return(object) |
