Provides tools for describing parameters of algorithms in an abstract
way. Description can include an id, a description, a domain (range or
list of values), and a default value. ‘dynparam’ can also convert
parameter sets to a ParamHelpers
format, in order to be
able to use dynparam
in conjunction with
mlrMBO
. Check ?dynparam
for an overview of all
functionality provided by dynparam.
The main goal of dynparam
is to be able to describe a
set of parameters, be able to serialise the parameter sets, and also
sample random settings from the parameter set.
library(tidyverse)
library(dynparam)
set.seed(1)
Define a parameter set as follows:
<- parameter_set(
parameters integer_parameter(
id = "num_iter",
default = 100L,
distribution = expuniform_distribution(lower = 1L, upper = 10000L),
description = "Number of iterations"
),subset_parameter(
id = "dimreds",
default = c("pca", "mds"),
values = c("pca", "mds", "tsne", "umap", "ica"),
description = "Which dimensionality reduction methods to apply (can be multiple)"
),integer_range_parameter(
id = "ks",
default = c(3L, 15L),
lower_distribution = uniform_distribution(1L, 5L),
upper_distribution = uniform_distribution(10L, 20L),
description = "The numbers of clusters to be evaluated"
) )
You can retrieve the default parameters as follows:
get_defaults(parameters)
## $num_iter
## [1] 100
##
## $dimreds
## [1] "pca" "mds"
##
## $ks
## [1] 3 15
Serialise a parameter set from/to json/yaml with the
as.list()
and as_parameter_set()
functions.
<- as.list(parameters)
li <- as_parameter_set(li) pa
Sample a parameter set using with sip()
:
sip(pa, n = 3)
## Loading required namespace: ParamHelpers
## Loading required namespace: lhs
## # A tibble: 3 x 4
## num_iter dimreds ks .object_class
## <int> <list> <list> <list>
## 1 2 <chr [2]> <dbl [2]> <chr [1]>
## 2 2003 <chr [2]> <dbl [2]> <chr [1]>
## 3 5 <chr [3]> <dbl [2]> <chr [1]>
<- parameter_set(
parameters integer_parameter(
id = "num_iter",
default = 100L,
distribution = expuniform_distribution(lower = 1L, upper = 10000L),
description = "Number of iterations"
),numeric_parameter(
id = "delta",
default = c(4.5, 2.4, 1.9),
distribution = normal_distribution(mean = 5, sd = 1),
description = "Multiplying factors"
),character_parameter(
id = "method",
default = "kendall",
values = c("kendall", "spearman", "pearson"),
description = "Correlation method"
),logical_parameter(
id = "inverse",
default = TRUE,
description = "Inversion parameter"
),subset_parameter(
id = "dimreds",
default = c("pca", "mds"),
values = c("pca", "mds", "tsne", "umap", "ica"),
description = "Which dimensionality reduction methods to apply (can be multiple)"
),integer_range_parameter(
id = "ks",
default = c(3L, 15L),
lower_distribution = uniform_distribution(1L, 5L),
upper_distribution = uniform_distribution(10L, 20L),
description = "The numbers of clusters to be evaluated."
),numeric_range_parameter(
id = "quantiles",
default = c(0.15, 0.90),
lower_distribution = uniform_distribution(0, .4),
upper_distribution = uniform_distribution(.6, 1),
description = "Quantile cutoff range"
),forbidden = "inverse == (method == 'kendall')"
)
As yaml:
cat(yaml::as.yaml(as.list(parameters)))
- id: num_iter
default: 100
description: Number of iterations
tuneable: yes
distribution:
lower: 1
upper: 10000
type: expuniform
type: integer
- id: delta
default:
- 4.5
- 2.4
- 1.9
description: Multiplying factors
tuneable: yes
distribution:
lower: -.inf
upper: .inf
mean: 5.0
sd: 1.0
type: normal
type: numeric
- id: method
default: kendall
description: Correlation method
tuneable: yes
values:
- kendall
- spearman
- pearson
type: character
- id: inverse
default: yes
description: Inversion parameter
tuneable: yes
type: logical
- id: dimreds
default:
- pca
- mds
description: Which dimensionality reduction methods to apply (can be multiple)
tuneable: yes
values:
- pca
- mds
- tsne
- umap
- ica
type: subset
- id: ks
default:
- 3
- 15
description: The numbers of clusters to be evaluated.
tuneable: yes
lower_distribution:
lower: 1
upper: 5
type: uniform
upper_distribution:
lower: 10
upper: 20
type: uniform
type: integer_range
- id: quantiles
default:
- 0.15
- 0.9
description: Quantile cutoff range
tuneable: yes
lower_distribution:
lower: 0.0
upper: 0.4
type: uniform
upper_distribution:
lower: 0.6
upper: 1.0
type: uniform
type: numeric_range
- forbidden: inverse == (method == 'kendall')
Generate a random parameter set:
sip(parameters, n = 2)
## # A tibble: 2 x 8
## num_iter delta method inverse dimreds ks quantiles .object_class
## <int> <list> <chr> <lgl> <list> <list> <list> <list>
## 1 1823 <dbl [3]> kendall FALSE <chr [3]> <dbl [2]> <dbl [2]> <chr [1]>
## 2 125 <dbl [3]> pearson TRUE <chr [2]> <dbl [2]> <dbl [2]> <chr [1]>
Convert paramhelper object:
as_paramhelper(parameters)
## Type len Def Constr Req
## num_iter numeric - 0.5 0 to 1 -
## delta numericvector 3 0.309,0.0046... 0 to 1 -
## method discrete - kendall kendall,spearman,pearson -
## inverse logical - TRUE - -
## dimreds integervector 5 1,1,0,0,0 0 to 1 -
## ks numericvector 2 0.5,0.5 0 to 1 -
## quantiles numericvector 2 0.375,0.75 0 to 1 -
## Tunable Trafo
## num_iter TRUE Y
## delta TRUE Y
## method TRUE -
## inverse TRUE -
## dimreds TRUE Y
## ks TRUE Y
## quantiles TRUE Y
## Forbidden region specified.
Check out news(package = "dynparam")
or NEWS.md for a full list of changes.
check.environment
to
FALSE
in unit tests to fix breaking changes in R
devel.expect_equal(., ., tolerance = .)
instead of expect_lte(abs(. - .), .)
in tests.