parameterspace.configspace_utils
Initialize a ParameterSpace
from a ConfigSpace
JSON dictionary.
parameterspace_from_configspace_dict(configspace_dict)
Create ParameterSpace
instance from a ConfigSpace
JSON dictionary.
Note, that ParameterSpace
does not support regular, non-truncated normal priors
and will thus translate an unbounded normal prior to a normal truncated at +/- 4
sigma. Also, constant parameters are represented as categoricals with a single value
that are fixed to said value.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
configspace_dict |
dict |
The dictionary based on a |
required |
Returns:
Type | Description |
---|---|
Tuple[parameterspace.parameterspace.ParameterSpace, Dict[str, str]] |
A |
Source code in parameterspace/configspace_utils.py
def parameterspace_from_configspace_dict(
configspace_dict: dict,
) -> Tuple[ps.ParameterSpace, Dict[str, str]]:
"""Create `ParameterSpace` instance from a `ConfigSpace` JSON dictionary.
Note, that `ParameterSpace` does not support regular, non-truncated normal priors
and will thus translate an unbounded normal prior to a normal truncated at +/- 4
sigma. Also, constant parameters are represented as categoricals with a single value
that are fixed to said value.
Args:
configspace_dict: The dictionary based on a `ConfigSpace` JSON representation.
Returns:
A `ParameterSpace` instance.
A mapping between parameter names that were changed for compatibility reasons.
Raises:
NotImplementedError in case a given parameter type or configuration is not
supported.
"""
space = ps.ParameterSpace()
names: Dict[str, str] = {}
for param_dict in configspace_dict["hyperparameters"]:
param_name = _escape_parameter_name(param_dict["name"])
if param_dict["name"] != param_name:
names[param_name] = param_dict["name"]
names[param_dict["name"]] = param_name
condition = _get_condition(configspace_dict["conditions"], param_dict["name"])
if param_dict["type"] == "uniform_int":
space._parameters[param_name] = {
"parameter": ps.IntegerParameter(
name=param_name,
bounds=(param_dict["lower"], param_dict["upper"]),
transformation="log" if param_dict["log"] else None,
),
"condition": condition,
}
elif param_dict["type"] == "categorical":
space._parameters[param_name] = {
"parameter": ps.CategoricalParameter(
name=param_name,
values=param_dict["choices"],
prior=param_dict.get("weights", None),
),
"condition": condition,
}
elif param_dict["type"] in ["constant", "unparametrized"]:
space._parameters[param_name] = {
"parameter": ps.CategoricalParameter(
name=param_name,
values=[param_dict["value"]],
),
"condition": condition,
}
space.fix(**{param_name: param_dict["value"]})
elif param_dict["type"] in ["normal_float", "normal_int"]:
parameter_class = (
ps.ContinuousParameter
if param_dict["type"] == "normal_float"
else ps.IntegerParameter
)
lower_bound, upper_bound, mean, std = _convert_for_normal_parameter(
log=param_dict["log"],
lower=param_dict.get("lower", None),
upper=param_dict.get("upper", None),
mu=param_dict["mu"],
sigma=param_dict["sigma"],
)
space._parameters[param_name] = {
"parameter": parameter_class(
name=param_name,
bounds=(lower_bound, upper_bound),
prior=ps.priors.TruncatedNormal(mean=mean, std=std),
transformation="log" if param_dict["log"] else None,
),
"condition": condition,
}
elif param_dict["type"] == "uniform_float":
space._parameters[param_name] = {
"parameter": ps.ContinuousParameter(
name=param_name,
bounds=(param_dict["lower"], param_dict["upper"]),
transformation="log" if param_dict["log"] else None,
),
"condition": condition,
}
elif param_dict["type"] == "ordinal":
space._parameters[param_name] = {
"parameter": ps.OrdinalParameter(
name=param_name,
values=param_dict["sequence"],
),
"condition": condition,
}
else:
raise NotImplementedError(f"Unsupported type {param_dict['type']}")
return space, names