A new feature in the latest version of OPTaaS is the SubsetParameter
. It's similar to the existing CategoricalParameter
, but instead of choosing one value from a set of allowed values, we can choose a subset (zero or more values).
For example, we may want to know whether winsorizing any of the features in our dataset has a positive impact:
from mindfoundry.optaas.client.parameter import SubsetParameter, BoolParameter
winsorize = SubsetParameter('winsorize', id='winsorize', values=['feature_A', 'feature_B', 'feature_C', 'feature_D', 'feature_E'],
default=['feature_A', 'feature_C'])
display(winsorize)
{'id': 'winsorize', 'name': 'winsorize', 'type': 'subset', 'default': ['feature_A', 'feature_C'], 'allowedValues': ['feature_A', 'feature_B', 'feature_C', 'feature_D', 'feature_E']}
We can use constraints with SubsetParameters:
from mindfoundry.optaas.client.constraint import Constraint
winsorize_all = BoolParameter('winsorize_all', id='winsorize_all')
# Equals
Constraint(when=winsorize_all == True, then=winsorize == ['feature_A', 'feature_B', 'feature_C', 'feature_D', 'feature_E'])
if #winsorize_all == true then #winsorize == ['feature_A', 'feature_B', 'feature_C', 'feature_D', 'feature_E']
# Not equals
Constraint(winsorize != [])
#winsorize != []
And if the parameter is optional:
Constraint(winsorize.is_present())
#winsorize is_present
Constraint(winsorize.is_absent())
#winsorize is_absent
from mindfoundry.optaas.client.client import OPTaaSClient
client = OPTaaSClient('https://optaas.mindfoundry.ai', '<Your OPTaaS API key>')
task = client.create_task(
title='Winsorizing',
parameters=[winsorize],
constraints=[Constraint(winsorize != [])],
)
task.generate_configurations(10)
[{'type': 'default', 'values': {'winsorize': ['feature_A', 'feature_C']}}, { 'type': 'exploration', 'values': {'winsorize': ['feature_B', 'feature_D', 'feature_E']}}, { 'type': 'exploration', 'values': {'winsorize': ['feature_A', 'feature_B', 'feature_C', 'feature_D']}}, {'type': 'exploration', 'values': {'winsorize': ['feature_B', 'feature_E']}}, {'type': 'exploration', 'values': {'winsorize': ['feature_A', 'feature_C']}}, {'type': 'exploration', 'values': {'winsorize': ['feature_E']}}, {'type': 'exploration', 'values': {'winsorize': ['feature_D']}}, { 'type': 'exploration', 'values': {'winsorize': ['feature_A', 'feature_B', 'feature_D', 'feature_E']}}, {'type': 'exploration', 'values': {'winsorize': ['feature_A', 'feature_C']}}, {'type': 'exploration', 'values': {'winsorize': ['feature_E']}}]