Make shared routines for data loading and preprocessing
The data loading and preprocessing is the same for each model. This MR makes a preprocessing.py
script that has one routine to load the data, and one to oversample and scale the data.
This doesn't change any of the maths, it just removes code repetition and makes it easier to ensure consistency.