Skip to content

Commit 223a7fd

Browse files
authored
Merge pull request #108 from mlr-org/add_more_kernlab
regr.rvm and classif.lssvm
2 parents bc1ba55 + 95b5a84 commit 223a7fd

10 files changed

+463
-3
lines changed

DESCRIPTION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: mlr3extralearners
22
Title: Extra Learners For mlr3
3-
Version: 0.5.7
3+
Version: 0.5.8
44
Authors@R:
55
c(person(given = "Raphael",
66
family = "Sonabend",

NAMESPACE

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export(LearnerClassifJ48)
1919
export(LearnerClassifJRip)
2020
export(LearnerClassifKSVM)
2121
export(LearnerClassifLMT)
22+
export(LearnerClassifLSSVM)
2223
export(LearnerClassifLiblineaR)
2324
export(LearnerClassifLightGBM)
2425
export(LearnerClassifMob)
@@ -56,6 +57,7 @@ export(LearnerRegrLightGBM)
5657
export(LearnerRegrM5Rules)
5758
export(LearnerRegrMars)
5859
export(LearnerRegrMob)
60+
export(LearnerRegrRVM)
5961
export(LearnerRegrRandomForest)
6062
export(LearnerRegrRandomForestSRC)
6163
export(LearnerSurvAkritas)

NEWS.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# mlr3extralearners 0.5.8
2+
3+
* Add `regr.rvm` and `classif.lssvm`
4+
15
# mlr3extralearners 0.5.7
26

37
* Introduced new custom hyperparameters for `randomForestSRC::rfsrc()`,
@@ -8,7 +12,6 @@
812

913
* Fix learners requiring distr6. distr6 1.6.0 now forced and param6 added to suggests
1014

11-
1215
# mlr3extralearners 0.5.5
1316

1417
* Bugfix `regr.gausspr`

R/learner_kernlab_classif_gausspr.R

-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ LearnerClassifGausspr = R6Class("LearnerClassifGausspr",
8686
},
8787

8888
.predict = function(task) {
89-
9089
out = setNames(vector("list", 1L), self$predict_type)
9190
out[[1]] = mlr3misc::invoke(
9291
getMethod("predict", "gausspr"),

R/learner_kernlab_classif_lssvm.R

+108
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#' @title Classification Least Squares Support Vector Machine Learner
2+
#' @author RaphaelS1
3+
#' @name mlr_learners_classif.lssvm
4+
#'
5+
#' @template class_learner
6+
#' @templateVar id classif.lssvm
7+
#' @templateVar caller lssvm
8+
#'
9+
#' @details Parameters `sigma`, `degree`, `scale`, `offset`, `order`, `length`,
10+
#' `lambda`, and `normalized` are added to make tuning `kpar` easier.
11+
#' If `kpar` is provided then these new parameters are ignored. If none are
12+
#' provided then the default "automatic" is used for `kpar`.
13+
#'
14+
#' @template seealso_learner
15+
#' @template example
16+
#' @export
17+
LearnerClassifLSSVM = R6Class("LearnerClassifLSSVM",
18+
inherit = LearnerClassif,
19+
20+
public = list(
21+
#' @description
22+
#' Creates a new instance of this [R6][R6::R6Class] class.
23+
initialize = function() {
24+
25+
ps = ps(
26+
scaled = p_uty(default = TRUE, tag = "train"),
27+
kernel = p_fct(default = "rbfdot",
28+
levels = c(
29+
"rbfdot", "polydot", "vanilladot", "tanhdot",
30+
"laplacedot", "besseldot", "anovadot", "splinedot", "stringdot"),
31+
tags = "train"),
32+
sigma = p_dbl(tag = c("train", "kpar")),
33+
degree = p_dbl(tag = c("train", "kpar")),
34+
scale = p_dbl(tag = c("train", "kpar")),
35+
offset = p_dbl(tag = c("train", "kpar")),
36+
order = p_dbl(tag = c("train", "kpar")),
37+
length = p_int(lower = 0, tag = c("train", "kpar")),
38+
lambda = p_dbl(tag = c("train", "kpar")),
39+
normalized = p_lgl(tag = c("train", "kpar")),
40+
kpar = p_uty(default = "automatic", tag = "train"),
41+
tau = p_dbl(default = 0.01, tag = "train"),
42+
reduced = p_lgl(default = TRUE, tag = "train"),
43+
rank = p_int(tag = "train"),
44+
delta = p_int(default = 40, tag = "train"),
45+
tol = p_dbl(default = 0.0001, tag = "train"),
46+
fit = p_lgl(default = TRUE, tag = "train"),
47+
cross = p_int(lower = 0, default = 0, tag = "train"),
48+
na.action = p_uty(default = na.omit, tag = "train")
49+
)
50+
51+
super$initialize(
52+
id = "classif.lssvm",
53+
packages = "kernlab",
54+
feature_types = c("numeric", "integer"),
55+
predict_types = "response",
56+
properties = c("twoclass", "multiclass"),
57+
param_set = ps,
58+
man = "mlr3extralearners::mlr_learners_classif.lssvm"
59+
)
60+
}
61+
62+
63+
),
64+
65+
private = list(
66+
67+
.train = function(task) {
68+
69+
# get parameters for training
70+
pars = self$param_set$get_values(tags = "train")
71+
kpars = self$param_set$get_values(tags = "kpar")
72+
kpar = self$param_set$values$kpar
73+
74+
if (is.null(kpar)) {
75+
if (length(kpars)) {
76+
kpar = kpars
77+
} else {
78+
kpar = "automatic"
79+
}
80+
}
81+
82+
pars = pars[setdiff(names(pars), c("kpar", names(kpars)))]
83+
84+
85+
# set column names to ensure consistency in fit and predict
86+
self$state$feature_names = task$feature_names
87+
88+
mlr3misc::invoke(kernlab::lssvm,
89+
x = task$formula(),
90+
data = task$data(),
91+
kpar = kpar,
92+
.args = pars)
93+
},
94+
95+
.predict = function(task) {
96+
out = setNames(vector("list", 1L), self$predict_type)
97+
out[[1]] = mlr3misc::invoke(
98+
getMethod("predict", "lssvm"),
99+
self$model,
100+
task$data(cols = self$state$feature_names),
101+
type = self$predict_type
102+
)
103+
out
104+
}
105+
)
106+
)
107+
108+
.extralrns_dict$add("classif.lssvm", LearnerClassifLSSVM)

R/learner_kernlab_regr_rvm.R

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#' @title Regression Relevance Vector Machine Learner
2+
#' @author RaphaelS1
3+
#' @name mlr_learners_regr.rvm
4+
#'
5+
#' @template class_learner
6+
#' @templateVar id regr.rvm
7+
#' @templateVar caller rvm
8+
#'
9+
#' @details Parameters `sigma`, `degree`, `scale`, `offset`, `order`, `length`,
10+
#' `lambda`, and `normalized` are added to make tuning `kpar` easier.
11+
#' If `kpar` is provided then these new parameters are ignored. If none are
12+
#' provided then the default "automatic" is used for `kpar`.
13+
#'
14+
#' @template seealso_learner
15+
#' @template example
16+
#' @export
17+
LearnerRegrRVM = R6Class("LearnerRegrRVM",
18+
inherit = LearnerRegr,
19+
20+
public = list(
21+
#' @description
22+
#' Creates a new instance of this [R6][R6::R6Class] class.
23+
initialize = function() {
24+
25+
ps = ps(
26+
kernel = p_fct(default = "rbfdot",
27+
levels = c(
28+
"rbfdot", "polydot", "vanilladot", "tanhdot",
29+
"laplacedot", "besseldot", "anovadot", "splinedot", "stringdot"),
30+
tags = "train"),
31+
sigma = p_dbl(tag = c("train", "kpar")),
32+
degree = p_dbl(tag = c("train", "kpar")),
33+
scale = p_dbl(tag = c("train", "kpar")),
34+
offset = p_dbl(tag = c("train", "kpar")),
35+
order = p_dbl(tag = c("train", "kpar")),
36+
length = p_int(lower = 0, tag = c("train", "kpar")),
37+
lambda = p_dbl(tag = c("train", "kpar")),
38+
normalized = p_lgl(tag = c("train", "kpar")),
39+
kpar = p_uty(default = "automatic", tag = "train"),
40+
alpha = p_uty(default = 5, tag = "train"),
41+
var = p_dbl(lower = 10^-3, default = 0.1, tag = "train"),
42+
var.fix = p_lgl(default = FALSE, tag = "train"),
43+
iterations = p_int(default = 100, lower = 0, tags = "train"),
44+
tol = p_dbl(lower = 0, default = .Machine$double.eps, tag = "train"),
45+
minmaxdiff = p_dbl(lower = 0, default = 1e-3, tag = "train"),
46+
verbosity = p_lgl(default = FALSE, tag = "train"),
47+
fit = p_lgl(default = TRUE, tag = "train"),
48+
cross = p_int(lower = 0, default = 0, tag = "train"),
49+
na.action = p_uty(default = na.omit, tag = "train")
50+
)
51+
52+
super$initialize(
53+
id = "regr.rvm",
54+
packages = "kernlab",
55+
feature_types = c("numeric", "integer", "logical", "character",
56+
"factor", "ordered"),
57+
predict_types = "response",
58+
param_set = ps,
59+
man = "mlr3extralearners::mlr_learners_regr.rvm"
60+
)
61+
}
62+
63+
64+
),
65+
66+
private = list(
67+
68+
.train = function(task) {
69+
70+
# get parameters for training
71+
pars = self$param_set$get_values(tags = "train")
72+
kpars = self$param_set$get_values(tags = "kpar")
73+
kpar = self$param_set$values$kpar
74+
75+
if (is.null(kpar)) {
76+
if (length(kpars)) {
77+
kpar = kpars
78+
} else {
79+
kpar = "automatic"
80+
}
81+
}
82+
83+
pars = pars[setdiff(names(pars), c("kpar", names(kpars)))]
84+
85+
86+
# set column names to ensure consistency in fit and predict
87+
self$state$feature_names = task$feature_names
88+
89+
mlr3misc::invoke(kernlab::rvm,
90+
x = task$formula(),
91+
data = task$data(),
92+
kpar = kpar,
93+
.args = pars)
94+
},
95+
96+
.predict = function(task) {
97+
list(response = as.numeric(mlr3misc::invoke(
98+
getMethod("predict", "rvm"),
99+
self$model,
100+
task$data(cols = self$state$feature_names)
101+
)))
102+
}
103+
)
104+
)
105+
106+
.extralrns_dict$add("regr.rvm", LearnerRegrRVM)

man/mlr_learners_classif.lssvm.Rd

+100
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)