GitHub - dynverse/dynparam (original) (raw)

dynparam

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 usedynparam in conjunction with mlrMBO. Check ?dynparam for an overview of all functionality provided by dynparam.

Examples

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:

parameters <- parameter_set( 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:

## $num_iter
## [1] 100
## 
## $dimreds
## [1] "pca" "mds"
## 
## $ks
## [1]  3 15

Serialise a parameter set from/to json/yaml with the as.list() andas_parameter_set() functions.

li <- as.list(parameters) pa <- as_parameter_set(li)

Sample a parameter set using with sip():

## 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]>

Large parameter set

parameters <- parameter_set( 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)))

Generate a random parameter set:

## # A tibble: 2 x 8
##   num_iter delta   method  inverse dimreds  ks      quantiles .object_class
##      <int> <list>  <chr>   <lgl>   <list>   <list>  <list>    <list>       
## 1       90 <dbl [… spearm… TRUE    <chr [3… <dbl [… <dbl [2]> <chr [1]>    
## 2      332 <dbl [… spearm… TRUE    <chr [4… <dbl [… <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.

Latest changes

Check out news(package = "dynparam") or NEWS.md for a full list of changes.

Recent changes in dynparam 1.0.0 (02-04-2019)

Dynverse dependencies