#' @title Classification of functional data by Generalized Linear Models.
#'
#' @description
#' Learner for classification using Generalized Linear Models.
#'
#' @export
makeRLearner.classif.fdausc.glm = function() {
makeRLearnerClassif(
cl = "classif.fdausc.glm",
package = "fda.usc",
par.set = makeParamSet(
makeDiscreteLearnerParam(id = "family", default = "binomial()", values = list("binomial()", "gaussian()", "Gamma()", "inverse.gaussian()", "poisson()")),
makeUntypedLearnerParam(id = "basis.x"),
makeUntypedLearnerParam(id = "basis.b"),
makeLogicalLearnerParam(id = "CV", default = FALSE)
),
properties = c("twoclass", "multiclass", "prob", "functionals"),
name = "Generalized Linear Models classification on FDA",
short.name = "fdausc.glm",
note = "model$C[[1]] is set to quote(classif.glm)"
)
}
#' @export
trainLearner.classif.fdausc.glm = function(.learner, .task, .subset, .weights = NULL, ...) {
# Get and transform functional data
d = getTaskData(.task, subset = .subset, target.extra = TRUE, functionals.as = "matrix")
fd = getFunctionalFeatures(d$data)
# transform the data into fda.usc:fdata class type.
data.fdclass = fda.usc::fdata(mdata = as.matrix(fd))
# transform the data into fda.usc:fdata class type and save in a list
dat = list(df = data.frame(d$target), x = data.fdclass)
model = fda.usc::classif.glm(d.target ~ x, data = dat)
# Fix bug in package. The changed slot looks different when called with
# `fda.usc::lassif.glm()` than just `classif.glm()`
model$C[[1]] = quote(classif.glm)
return(model)
}
#' @export
predictLearner.classif.fdausc.glm = function(.learner, .model, .newdata, ...) {
# transform the data into fda.usc:fdata class type.
fd = getFunctionalFeatures(.newdata)
nd = list(x = fda.usc::fdata(mdata = fd))
# predict according to predict.type
type = ifelse(.learner$predict.type == "prob", "probs", "class")
if (type == "probs") {
predict(object = .model$learner.model, new.fdataobj = nd, type = type)$prob.group
} else {
predict(object = .model$learner.model, new.fdataobj = nd, type = type)
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.