Review

Core idea

Randomness should be controlled enough that an experiment can be rerun.

Random numbers

Create a generator:

rng = np.random.default_rng()

Generate integers:

rng.integers(1, 7, size=5)

Generate floats:

rng.random(5)

Seeds

A seed initializes the generator:

rng = np.random.default_rng(42)

Same seed, same sequence.

The generator state advances after each draw. Recreate a generator from the recorded seed to rerun a sequence from its beginning.

Sampling

Sample with:

rng.choice(items, size=3)

Use replace=False to sample without replacement.

Shuffling and splitting

Shuffle indices:

Use the same indices for paired arrays such as X and y.

Fit on training data and reserve test data for a final check. Repeated choices need a separate validation set.

Saving results

Save the seed, configuration values, and result:

seed: 7
trials: 100
mean: 0.48

Configuration values

Use a dataclass when settings need names:

Configuration says what to do. Result says what happened.