-
-
Notifications
You must be signed in to change notification settings - Fork 404
/
FeatSelResult.R
50 lines (46 loc) · 1.95 KB
/
FeatSelResult.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#' Result of feature selection.
#'
#' Container for results of feature selection.
#' Contains the obtained features, their performance values
#' and the optimization path which lead there. \cr
#' You can visualize it using [analyzeFeatSelResult].
#'
#' Object members:
#' \describe{
#' \item{learner ([Learner])}{Learner that was optimized.}
#' \item{control ([FeatSelControl])}{ Control object from feature selection.}
#' \item{x ([character])}{Vector of feature names identified as optimal.}
#' \item{y ([numeric])}{Performance values for optimal `x`.}
#' \item{threshold ([numeric])}{Vector of finally found and used thresholds
#' if `tune.threshold` was enabled in [FeatSelControl], otherwise not present and
#' hence `NULL`.}
#' \item{opt.path ([ParamHelpers::OptPath])}{Optimization path which lead to `x`.}
#' }
#' @name FeatSelResult
#' @rdname FeatSelResult
NULL
#' @export
print.FeatSelResult = function(x, ...) {
catf("FeatSel result:")
shortenX = function(x) {
clipString(collapse(x, ", "), 50L)
}
if (!isTRUE(all.equal(x$x.bit.names, x$x))) {
catf("Bits (%i): %s", length(x$x.bit.names), shortenX(x$x.bit.names))
}
catf("Features (%i): %s", length(x$x), shortenX(x$x))
if (!is.null(x$threshold)) {
catf("Threshold: %s", collapse(sprintf("%2.2f", x$threshold)))
}
catf("%s", perfsToString(x$y))
}
makeFeatSelResultFromOptPath = function(learner, measures, resampling, control, opt.path, dob = opt.path$env$dob, ties = "random", task, bits.to.features) {
i = getOptPathBestIndex(opt.path, measureAggrName(measures[[1]]), dob = dob, ties = ties)
e = getOptPathEl(opt.path, i)
# if we had threshold tuning, get th from op and set it in result object
threshold = if (control$tune.threshold) e$extra$threshold else NULL
x.bits = unlist(e$x)
x.bit.names = names(e$x)[e$x == 1]
x = bits.to.features(x.bits, task)
makeOptResult(learner, control, x, e$y, resampling, threshold, opt.path, "FeatSelResult", x.bit.names = x.bit.names)
}