Classical machine learning assumes that the training and test sets come from
the same distributions. Therefore, a model learned from the labeled training
data is expected to perform well on the test data. However, This assumption may
not always hold in real-world applications where the training and the test data
fall from different distributions, due to many