`R/PredictionClassif.R`

This object wraps the predictions returned by a learner of class LearnerClassif, i.e. the predicted response and class probabilities.

If the response is not provided during construction, but class probabilities are, the response is calculated from the probabilities: the class label with the highest probability is chosen. In case of ties, a label is selected randomly.

R6::R6Class object inheriting from Prediction.

If this object is constructed manually, make sure that the factors for truth and response have the same levels, in the same order. In case of binary classification tasks, the positive class label must be the first level.

p = PredictionClassif$new(row_ids, truth, response = NULL, prob = NULL)

`row_ids`

:: (`integer()`

|`character()`

)

Row ids of the observations in the test set.`truth`

::`factor()`

True (observed) labels. See the note on manual construction.`response`

:: (`character()`

|`factor()`

)

Vector of predicted class labels. One element for each observation in the test set. Character vectors are automatically converted to factors. See the note on manual construction.`prob`

::`matrix()`

Numeric matrix of class probabilities with one column for each class and one row for each observation in the test set. Columns must be named with class labels, rownames are automatically removed.

All fields from Prediction, and additionally:

`response`

::`factor()`

Access to the stored predicted class labels.`prob`

::`matrix()`

Access to the stored probabilities.`confusion`

::`matrix()`

Confusion matrix resulting from the comparison of truth and response. Truth is in columns, predicted response is in rows.

The field `task_type`

is set to `"classif"`

.

`set_threshold(th)`

`numeric()`

-> named`list()`

Sets the prediction threshold, and returns a named list with updated`response`

and`prob`

. This list can be stored in the experiment (see examples). See the section on thresholding for more information.

If probabilities are stored, it is possible to change the threshold which determines the predicted class label. Usually, the label of the class with the highest predicted probability is selected. For binary classification problems, such an threshold defaults to 0.5. For cost-sensitive or imbalanced classification problems, manually adjusting the threshold can increase the predictive performance.

For binary problems only a single threshold value can be set. If the probability exceeds the threshold, the positive class is predicted. If the probability equals the threshold, the label is selected randomly.

For binary and multi-class problems, a named numeric vector of thresholds can be set. The length and names must correspond to the number of classes and class names, respectively. To determine the class label, the probabilities are divided by the threshold. This results in a ratio > 1 if the probability exceeds the threshold, and a ratio < 1 otherwise. Note that it is possible that either none or multiple ratios are greater than 1 at the same time. Anyway, the class label with maximum ratio is selected. In case of ties in the ratio, one of the tied class labels is selected randomly.

Other Prediction: `PredictionRegr`

,
`Prediction`

task = mlr_tasks$get("iris") learner = mlr_learners$get("classif.rpart") learner$predict_type = "prob" e = Experiment$new(task, learner)$train()$predict() p = e$prediction p$predict_types#> [1] "response" "prob"#> row_id truth response prob.setosa prob.versicolor prob.virginica #> 1: 1 setosa setosa 1 0 0 #> 2: 2 setosa setosa 1 0 0 #> 3: 3 setosa setosa 1 0 0 #> 4: 4 setosa setosa 1 0 0 #> 5: 5 setosa setosa 1 0 0 #> 6: 6 setosa setosa 1 0 0# confusion matrix p$confusion#> truth #> response setosa versicolor virginica #> setosa 50 0 0 #> versicolor 0 49 5 #> virginica 0 1 45# change threshold th = c(0.05, 0.9, 0.05) names(th) = task$class_names # new predictions p$set_threshold(th)$response#> [1] setosa setosa setosa setosa setosa setosa setosa #> [8] setosa setosa setosa setosa setosa setosa setosa #> [15] setosa setosa setosa setosa setosa setosa setosa #> [22] setosa setosa setosa setosa setosa setosa setosa #> [29] setosa setosa setosa setosa setosa setosa setosa #> [36] setosa setosa setosa setosa setosa setosa setosa #> [43] setosa setosa setosa setosa setosa setosa setosa #> [50] setosa virginica virginica virginica virginica virginica virginica #> [57] virginica virginica virginica virginica virginica virginica virginica #> [64] virginica virginica virginica virginica virginica virginica virginica #> [71] virginica virginica virginica virginica virginica virginica virginica #> [78] virginica virginica virginica virginica virginica virginica virginica #> [85] virginica virginica virginica virginica virginica virginica virginica #> [92] virginica virginica virginica virginica virginica virginica virginica #> [99] virginica virginica virginica virginica virginica virginica virginica #> [106] virginica virginica virginica virginica virginica virginica virginica #> [113] virginica virginica virginica virginica virginica virginica virginica #> [120] virginica virginica virginica virginica virginica virginica virginica #> [127] virginica virginica virginica virginica virginica virginica virginica #> [134] virginica virginica virginica virginica virginica virginica virginica #> [141] virginica virginica virginica virginica virginica virginica virginica #> [148] virginica virginica virginica #> Levels: setosa versicolor virginica# update the threshold in the experiment e$score()$performance # score before thresholding#> classif.ce #> 0.04e$prediction = e$prediction$set_threshold(th) e$score()$performance # score after thresholding#> classif.ce #> 0.3333333