+++ /dev/null
-#' @include b_LinearAlgorithm.R
-
-#' @title Ridge Regression Algorithm
-#'
-#' @description Ridge Regression Algorithm.
-#' Inherits \code{\link{LinearAlgorithm}}
-#'
-#' @field lambda Value of lambda (let undefined for cross-validation). Default: undefined
-#' @field lambdas Vector of "optimal" lambda values over time. TODO: remove for production
-#'
-RidgeRegression = setRefClass(
- Class = "RidgeRegression",
-
- fields = c(
- lambda = "numeric",
- lambdas = "numeric"
- ),
-
- contains = "LinearAlgorithm",
-
- methods = list(
- predict_noNA = function(XY, x)
- {
- if (length(lambda) > 0 || nrow(XY) < 30) #TODO: magic number
- {
- #simple ridge regression with fixed lambda (not enough history for CV)
- X = matricize(XY[,names(XY) != "Measure"])
- Y = XY[,"Measure"]
- lambda_ = ifelse(length(lambda) > 0, lambda, LAMBDA)
- weight = ridgeSolve(X, Y, lambda_)
- }
-
- else
- {
- #enough data for cross-validations
- require(MASS, quietly=TRUE)
- gridLambda = seq(0.05,5.05,0.1)
- res_lmr = lm.ridge(Measure ~ . + 0, data=XY, lambda = gridLambda)
- lambda_ = res_lmr$lambda[which.min(res_lmr$GCV)]
- weight = as.matrix(coef(res_lmr))[which.min(res_lmr$GCV),]
- }
-
- lambdas <<- c(lambdas, lambda_)
-
- appendWeight(weight)
- return (matricize(x) %*% weight)
- }
- )
-)