diff --git a/DESCRIPTION b/DESCRIPTION index 78d896440..0d206c3b4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: mlr3 Title: Machine Learning in R - Next Generation -Version: 1.2.0.9000 +Version: 1.3.0 Authors@R: c( person("Michel", "Lang", , "michellang@gmail.com", role = "aut", diff --git a/NEWS.md b/NEWS.md index 267bda519..63d779463 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,16 @@ -# mlr3 (development version) +# mlr3 1.3.0 * feat: `Learner$predict()` can now add additional data to `PredictionClassif` and `PredictionRegr` objects via the `extra` field. +* feat: `Mlr3Error` and `Mlr3Warning` classes for errors and warnings. +* refactor: `$obs_loss` methods in `Measure`, `Prediction`, `ResampleResult`, and `BenchmarkResult`. +* perf: Use more `lengths()` and `data.table::setattr()` in tests. +* perf: Use `attr()` instead of `attributes()` for extracting single attributes. +* test: Use more specialised test functions. +* fix: `weights_measure` now work with `stratum`. +* fix: Encapsulation loads loaded packages on the workers. +* fix: Learners can handle new factor levels. +* refactor: Use more implicit returns. +* feat: Learner can pass extra data to predictions. # mlr3 1.2.0 diff --git a/tests/testthat/test_Measure.R b/tests/testthat/test_Measure.R index c98afd626..21a54f3a3 100644 --- a/tests/testthat/test_Measure.R +++ b/tests/testthat/test_Measure.R @@ -275,38 +275,29 @@ test_that("measure weights", { }) - - - test_that("primary iters are respected", { task = tsk("sonar") - resampling = rsmp("cv")$instantiate(task) - train_sets = map(1:10, function(i) resampling$train_set(i)) - test_sets = map(1:10, function(i) resampling$train_set(i)) - r1 = rsmp("custom")$instantiate(task, train_sets = train_sets, test_sets = test_sets) - get_private(r1, ".primary_iters") = 1:2 - r2 = rsmp("custom")$instantiate(task, train_sets = train_sets[1:2], test_sets = test_sets[1:2]) - r3 = rsmp("custom")$instantiate(task, train_sets = train_sets, test_sets = test_sets) - learner = lrn("classif.rpart", predict_type = "prob") + resampling = rsmp("cv", folds = 10) + resampling$instantiate(task) + get_private(resampling, ".primary_iters") = 1:2 - rr1 = resample(task, learner, r1, store_models = TRUE) - rr2 = resample(task, learner, r2, store_models = TRUE) - rr3 = resample(task, learner, r3, store_models = TRUE) - + rr = resample(task, learner, resampling) m = msr("classif.acc") m$average = "macro" - expect_equal(rr1$aggregate(), rr2$aggregate()) - m$average = "micro" - expect_equal(rr1$aggregate(), rr2$aggregate()) + scores = rr$score(m)$classif.acc + + # macro aggregation + expect_equal(unname(rr$aggregate(m)), mean(scores[1:2])) + expect_true(unname(rr$aggregate(m)) != mean(scores)) + + # micro aggregation + pred_micro = do.call(c, rr$predictions()[1:2]) + scores = pred_micro$score(m) + expect_equal(unname(m$score(pred_micro)), unname(scores)) jaccard = msr("sim.jaccard") - expect_error(rr1$aggregate(jaccard), "primary_iters") - expect_no_error(rr2$aggregate(jaccard)) - jaccard$properties = c(jaccard$properties, "primary_iters") - x1 = rr1$aggregate(jaccard) - x2 = rr3$aggregate(jaccard) - expect_equal(x1, x2) + expect_error(rr$aggregate(jaccard), "primary_iters") }) test_that("no predict_sets required (#1094)", {