Generating full factorial designs
Often in scientific computing, we are interested in generating a full factorial design of a computational experiment (see, for example, http://www.socialresearchmethods.net/kb/expfact.php or https://en.wikipedia.org/wiki/Factorial_experiment). A typical application of this design is performing a grid search in hyperparameter tuning of machine learning models (see https://cloud.google.com/ml-engine/docs/tensorflow/hyperparameter-tuning-overview or https://en.wikipedia.org/wiki/Hyperparameter_optimization#Grid_search).
Assume that we are given a list of vectors and we want to generate all possible combinations of values taken from those vectors. For instance, if we have the x=[1,2]
and y=['a', 'b']
vectors, we have four possible combinations of values taken from them, namely, (1,'a')
, (2, 'a')
, (1,'b')
, and (2,'b')
. In general, if we have
![](https://static.packt-cdn.com/products/9781788998369/graphics/3dc418ce-a600-415c-aaad-5aa7cd33f882.png)
vectors, and vector
![](https://static.packt-cdn.com/products/9781788998369/graphics/74d7142c-854b-4d04-9393-eec828a5c8a6.png)
has
![](https://static.packt-cdn.com/products/9781788998369/graphics/942c06b1-874d-41d8-b937-917432cf563a.png)
elements, then there are
![](https://static.packt-cdn.com/products/9781788998369/graphics/2519edbd-0bfd-4b34-8ef0-d218035975b4.png)
such combinations. In this recipe, we will show how to use the matrix...