makeRLearner.classif.grplasso = function() {
makeRLearnerClassif(
cl = "classif.grplasso",
package = "grplasso",
par.set = makeParamSet(
makeNumericLearnerParam(id="lambda", default=1, lower=0),
makeUntypedLearnerParam(id="index")
),
twoclass = TRUE,
numerics = TRUE,
prob = TRUE,
weights = TRUE
)
}
trainLearner.classif.grplasso = function(.learner, .task, .subset, ...) {
# FIXME: bug in grplasso: index cant be passed with formula interface....
d = getTaskData(.task, .subset, target.extra=TRUE, recode.target="01")
x = cbind(1, as.matrix(d$data))
if (.task$task.desc$has.weights)
grplasso(x, d$target, weights=.task$weights[.subset], ...)
else
grplasso(x, d$target, ...)
}
predictLearner.classif.grplasso = function(.learner, .model, .newdata, ...) {
x = as.matrix(.newdata)
x = cbind(1, x)
p = as.numeric(predict(.model$learner.model, newdata=x, type="response", ...))
levs = c(.model$task.desc$negative, .model$task.desc$positive)
if (.learner$predict.type == "prob") {
y <- matrix(0, ncol=2, nrow=nrow(.newdata))
colnames(y) = levs
y[,1] = 1-p
y[,2] = p
return(y)
} else {
p = as.factor(ifelse(p > 0.5, levs[2], levs[1]))
names(p) = NULL
return(p)
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.