
Last chance! 50% off unlimited learning
Sale ends in
Efficient, object-oriented programming on the building blocks of machine learning. Successor of mlr.
remotes::install_github("mlr-org/mlr3")
library(mlr3)
set.seed(1)
# create learning task
task_iris = TaskClassif$new(id = "iris", backend = iris, target = "Species")
task_iris
## <TaskClassif:iris> (150 x 5)
## * Target: Species
## * Properties: multiclass
## Features (4):
## * dbl (4): Petal.Length, Petal.Width, Sepal.Length, Sepal.Width
# load learner and set hyperparamter
learner = lrn("classif.rpart", cp = 0.01)
# train/test split
train_set = sample(task_iris$nrow, 0.8 * task_iris$nrow)
test_set = setdiff(seq_len(task_iris$nrow), train_set)
# train the model
learner$train(task_iris, row_ids = train_set)
# predict data
prediction = learner$predict(task_iris, row_ids = test_set)
# calculate performance
prediction$confusion
## truth
## response setosa versicolor virginica
## setosa 11 0 0
## versicolor 0 12 1
## virginica 0 0 6
measure = msr("classif.acc")
prediction$score(measure)
## classif.acc
## 0.9666667
# automatic resampling
resampling = rsmp("cv", folds = 3L)
rr = resample(task_iris, learner, resampling)
## INFO [11:45:23.583] Applying learner 'classif.rpart' on task 'iris' (iter 1/3)
## INFO [11:45:23.775] Applying learner 'classif.rpart' on task 'iris' (iter 2/3)
## INFO [11:45:23.804] Applying learner 'classif.rpart' on task 'iris' (iter 3/3)
rr$performance(measure)
## task task_id learner learner_id
## <list> <char> <list> <char>
## 1: <TaskClassif> iris <LearnerClassifRpart> classif.rpart
## 2: <TaskClassif> iris <LearnerClassifRpart> classif.rpart
## 3: <TaskClassif> iris <LearnerClassifRpart> classif.rpart
## resampling resampling_id iteration prediction classif.acc
## <list> <char> <int> <list> <num>
## 1: <ResamplingCV> cv 1 <PredictionClassif> 0.92
## 2: <ResamplingCV> cv 2 <PredictionClassif> 0.92
## 3: <ResamplingCV> cv 3 <PredictionClassif> 0.94
rr$aggregate(measure)
## classif.acc
## 0.9266667
mlr was first released to CRAN in 2013. Its core design and architecture date back even further. The addition of many features has led to a feature creep which makes mlr hard to maintain and hard to extend. We also think that while mlr was nicely extensible in some parts (learners, measures, etc.), other parts were less easy to extend from the outside. Also, many helpful R libraries did not exist at the time mlr was created, and their inclusion would result in non-trivial API changes.
mlr
nicely.data.table
for
fast and convenient data frame computations.data.table
and R6
, for this we will make heavy use of
list columns in data.tables.mlr3
requires the following packages:backports
:
Ensures backward compatibility with older R releases. Developed
by members of the mlr
team. No recursive dependencies.checkmate
:
Fast argument checks. Developed by members of the mlr
team. No
extra recursive dependencies.mlr3misc
Miscellaneous
functions used in multiple mlr3 extension
packages.
Developed by the mlr
team. No extra recursive dependencies.paradox
: Descriptions
for parameters and parameter sets. Developed by the mlr
team.
No extra recursive dependencies.R6
: Reference class
objects. No recursive dependencies.data.table
:
Extension of R’s data.frame
. No recursive dependencies.digest
: Hash
digests. No recursive dependencies.lgr
: Logging facility. No
extra recursive dependencies.Metrics
: Package
which implements performance measures. No recursive
dependencies.mlbench
: A
collection of machine learning data sets. No dependencies.mlr3
utilizes the
future
and
future.apply
packages.evaluate
and
callr
can be used.mlr-outreach holds all outreach activities related to mlr and mlr3.
install.packages('mlr3')
benchmark()
resample()
as.data.table
See data.table::as.data.table.