Do I correctly understand, that the test data is the whole dataset, whereas training is only a subset of it? Training and test data must not overlap. The test is a measure of quality on unseen, unfamiliar data.
In the case of inbalanced data and two class classification the naive classifier, predicting always the most probable class has the quality 891 / ...
You are comparing your training dataset (y_train) with your test dataset (test). These datasets have different lengths (891 vs 418) meaning that you can't compare them 1:1. You need to make sure you select both your features and values to predict from the same split, so either form the training or the test dataset.
I think that the issue depends on what you'd expect the model to learn:
If the model is supposed to "know" the users it has seen during training, i.e. exploit the user id in order to infer particular choices for a specific user, then I don't see the point in adding this kind of frequency feature: the model already "knows" what choices ...
Interesting question. As @ncasas mentions, for most cases, probably, for all cases, no.
There are many things that impact how fast a network will converge.
The optimizer and training hyperparameters
Whether you are using SGD, Adam, or another optimizer, it will have a direct impact on convergence speed. These optimizers have hyperparameters including, ...
One shortcoming is that the median is often more computational expensive to calculate than the mean. The median can be calculated with a variation of quickselect which is linear worst-case performance. Calculating the mean only requires the sum and count of the numbers.
I just ran a quick experiment training yolov4-csp on coco with batch sizes 8 and 9 and found that per-image, batch sized 9 was slightly more efficient than 8. So at least with pytorch and relatively small batches on a modern GPU (2080Ti) it would seem that there is no negative performance impact of not using powers of 2 for batch sizes.
After implementing and training this model and understanding the details better, it seems the short answer is NO, I have to remake and train the entire model.
It takes about 7 minutes to train about 3,500 series with about 100 datapoints each from a seed dataset. This may grow as the incremental ETL adds data indefinitely.
Somewhere in the code there should be some parameter that is initialised randomly, this is usually called the random seed. It could be the different initialisation of your neural network weights that is affecting the results, or maybe the k-fold being different if done at random.
The extent of the difference between the performance suggests that you might ...
The reasoning will be: "The more data for training the better". Then you have to keep in mind that the validation/hold-out set has to resemble how it should work on production/testing. The theory is that the larger the training data, the better the model should generalize.
The validation set can be much smaller, on extremely big dataset you can ...
You can simply train your convolutional layers, save the model and load weights from specific layers using the get_weights and set_weights methods (see also this previous answer). After loading the weights for you convolutional layers you can freeze those layers using the trainable attribute to make sure the weights are not changed during training.