# Random Numbers¶

## How milk handles random numbers¶

Many algorithms (e.g., kmeans) require random number initialisation.

In milk, all functions that internally use random numbers take an R parameter. If left unspecified (or set to None), then it means that the internal initialisation should be used.

R can be specified by an integer, a random.Random instance, or a numpy.RandomState instance. If the same R is passed twice to the function, then the results are deterministic.

## Functions that use random numbers¶

- kmeans: for initial cluster choice.
- repeated_kmeans: for use in kmeans internally.
- som: for initial choice of points.
- nnmf and sparse_nnmf: for initialisation.

`random`

and `numpy.random`

¶

There are two randomness mechanisms used internally by milk: random (the
standard Python package) and numpy.random. Setting the seed on just one of
them will not be enough. You need to set *both*. This is in alternative to
using the R technique outlined above.