Template Credit: Adapted from a template made available by Dr. Jason Brownlee of Machine Learning Mastery.
SUMMARY: The purpose of this project is to construct a prediction model using various machine learning algorithms and to document the end-to-end steps using a template. The Song Year Prediction dataset is a classic regression situation where we are trying to predict the value of a continuous variable.
INTRODUCTION: This data is a subset of the Million Song Dataset, http://labrosa.ee.columbia.edu/millionsong/, a collaboration between LabROSA (Columbia University) and The Echo Nest. The purpose of this exercise is to predict the release year of a song from audio features. Songs are mostly western, commercial tracks ranging from 1922 to 2011, with a peak in the year 2000s. The data preparer recommended the train/test split of the first 463,715 examples for training and the last 51,630 cases for testing. This approach avoids the ‘producer effect’ by making sure no song from a given artist ends up in both the train and test set.
In iteration Take1, we constructed several Multilayer Perceptron (MLP) models with one hidden layer of 16, 32, 64, and 128 nodes. The single-layer MLP model serves as the baseline model as we build more complex MLP models in future iterations.
In iteration Take2, we constructed several Multilayer Perceptron (MLP) models with two hidden layers. We observed the effects of having an additional layer in our MLP models.
In iteration Take3, we constructed several Multilayer Perceptron (MLP) models with three hidden layers. We also observed whether the additional layers improved the RMSE as we built more complex MLP models in future iterations.
In iteration Take4, we constructed several Multilayer Perceptron (MLP) models with dropout layers. We also observed whether the additional dropout layers improved the RMSE as we built more complex MLP models in future iterations.
In this Take5 iteration, we will construct several Multilayer Perceptron (MLP) models with dropout and batch normalization layers. We will observe whether the batch normalization technique can further improve the RMSE as we build more complex MLP models in future iterations.
ANALYSIS: In iteration Take1, all models processed the test dataset and produced RMSEs that are around 9.50. However, the single-layer models do not exhibit a stable curve when making predictions with the test dataset.
In iteration Take2, all models processed the test dataset and again produced RMSEs that are around 9.50. Moreover, the dual-layer models also did not exhibit a stable curve when making predictions with the test dataset.
In iteration Take3, all models processed the test dataset and again produced RMSEs that are around 9.50. Moreover, the three-layer models also did not exhibit a stable curve when making predictions with the test dataset.
In iteration Take4, the model with 256/128/64 layers and 0.2/0.2/0.0 dropout layers processed the test dataset and produced RMSEs that are around 8.90. Moreover, the multi-layer models with dropout on the first two hidden layers did a better job of having more stable training and testing curves.
In this Take5 iteration, all models performed worse with batch normalization compared to the models with only the dropout layers.
CONCLUSION: For this iteration, the different model architectures with batch normalization did not produce any better RMSE compared to the models without the batch normalization. For this dataset, we should consider experimenting with more MLP models using other regularization techniques.
Dataset Used: YearPredictionMSD Dataset
Dataset ML Model: Regression with numerical attributes
Dataset Reference: https://archive.ics.uci.edu/ml/datasets/YearPredictionMSD
Thierry Bertin-Mahieux, Daniel P.W. Ellis, Brian Whitman, and Paul Lamere. The Million Song Dataset. In Proceedings of the 12th International Society for Music Information Retrieval Conference (ISMIR 2011), 2011.
One potential source of performance benchmarks: https://www.kaggle.com/uciml/msd-audio-features/home
The HTML formatted report can be found here on GitHub.