Skip to content

isakovaad/ML-Spotify-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Predicting Musical Genres from Audio Features using Machine Learning

A comprehensive machine learning project for classifying music genres based on audio features extracted from Spotify's dataset. This project implements and compares multiple classification algorithms to predict musical genres with high accuracy.

Project Overview

This project tackles the challenge of automatic music genre classification using audio features and metadata. Built as a multi-class classification problem, it aims to categorize songs into various genres, enhancing music recommendation systems and library organization.

Key Highlights

  • Dataset: 42,305 songs with 22 features from Spotify
  • Best Performance: 71% accuracy using Keras Sequential Neural Network
  • Models Implemented: 8 different machine learning algorithms
  • Data Processing: Advanced outlier detection and feature scaling techniques

Motivation

  • For Users: Enhance music recommendation accuracy and improve listening experience
  • For Platforms: Better content organization and discovery features
  • For Researchers: Insights into musical trends and genre characteristics

Project Structure

├── altitude.ipynb                    # Data analysis and exploration
├── convert_to_parquet.py            # Data format conversion utility
├── elevation.ipynb                  # Additional data processing
├── group_by.ipynb                   # Data grouping and analysis
├── step1-EDA.ipynb                  # Exploratory Data Analysis
├── step2-data-preparation.ipynb     # Data cleaning and preprocessing
├── train-speed.ipynb                # Model training and evaluation
└── README.md                        # Project documentation

Installation & Setup

Prerequisites

Python 3.7+
Jupyter Notebook

Required Libraries

pip install pandas numpy matplotlib seaborn scikit-learn
pip install tensorflow keras plotly
pip install imbalanced-learn  # for SMOTE

Dataset

Download the "genres v2.csv" dataset from Kaggle - Dataset of Songs in Spotify

Dataset Description

Attribute Details
Rows 42,305 songs
Columns 22 features
Target Variable genre
Numerical Features danceability, energy, loudness, valence, tempo, etc.
Categorical Features type, id, song_name, title, etc.

Audio Features

  • Danceability: How suitable a track is for dancing
  • Energy: Perceptual measure of intensity and power
  • Valence: Musical positiveness conveyed by a track
  • Acousticness: Confidence measure of acoustic content
  • Instrumentalness: Predicts whether a track contains vocals
  • Speechiness: Presence of spoken words in a track
  • Tempo: Overall estimated tempo in BPM
  • Loudness: Overall loudness in decibels

Data Preprocessing

Data Cleaning Steps

  1. Missing Data Handling: Removed columns with >50% missing values
  2. Feature Selection: Dropped irrelevant metadata columns
  3. Outlier Detection: Applied IQR method and Z-score filtering
  4. Feature Scaling: Implemented both normalization and standardization
  5. Data Reduction: ~33% size reduction after outlier removal

Key Preprocessing Techniques

  • IQR (Interquartile Range): For outlier detection and removal
  • Z-Score Filtering: Statistical outlier identification
  • Feature Scaling: Min-max normalization and standardization
  • Data Quality Improvement: Enhanced distribution normality

Machine Learning Models

Models Implemented

Model Test Accuracy F1 Score Key Characteristics
Keras Sequential 0.71 0.71 Best performer, neural network
Random Forest 0.70 0.68 Ensemble method, robust
Multi-layer Perceptron 0.70 0.69 Neural network, good balance
Support Vector Machine 0.69 0.68 Effective for high-dimensional data
Naive Bayes 0.63 0.62 Probabilistic approach
Logistic Regression 0.61 0.61 Linear baseline model
K-Nearest Neighbors 0.60 0.58 Instance-based learning
Decision Tree 0.59 0.55 Interpretable but overfitting

Best Model Architecture (Keras Sequential)

# Neural Network Configuration
- Hidden Layers: Multiple dense layers with ReLU activation
- Regularization: L2 regularization (0.001) + Dropout (0.2)
- Batch Normalization: Applied after each hidden layer
- Optimizer: Adam with default parameters
- Loss Function: Categorical crossentropy
- Early Stopping: Patience of 10 epochs
- Learning Rate Reduction: Factor of 0.2 if no improvement

Results & Analysis

Performance Insights

  • Complex models outperform simple ones: Neural networks and ensemble methods achieve better results
  • Genre similarity challenge: Models struggle with similar genres (Underground Rap, Rap, Hip-hop, Dark Trap)
  • Class imbalance impact: Despite SMOTE application, similar genre features remain challenging
  • Feature interactions: Advanced models better capture non-linear relationships

Model Comparison

Model Performance Comparison

Usage

Quick Start

# 1. Data Loading and Preprocessing
import pandas as pd
from sklearn.preprocessing import StandardScaler

# Load data
df = pd.read_csv('genres_v2.csv')

# 2. Preprocessing
# Run step1-EDA.ipynb for exploratory analysis
# Run step2-data-preparation.ipynb for data cleaning

# 3. Model Training
# Execute train-speed.ipynb for model comparison

Running Individual Notebooks

# Exploratory Data Analysis
jupyter lab step1-EDA.ipynb

# Data Preparation
jupyter lab step2-data-preparation.ipynb

# Model Training and Evaluation
jupyter lab train-speed.ipynb

Key Findings

Challenges Identified

  1. Genre Similarity: Rap-based genres share similar audio characteristics
  2. Class Imbalance: Uneven distribution across music genres
  3. Feature Complexity: Non-linear relationships require advanced modeling

Success Factors

  1. Ensemble Methods: Random Forest shows robust performance
  2. Neural Networks: Best at capturing complex feature interactions
  3. Proper Preprocessing: Outlier removal significantly improves model performance
  4. Hyperparameter Tuning: Grid search optimization enhances results

Future Work

Planned Enhancements

  • Advanced Feature Engineering: Extract additional audio features
  • Lyrical Analysis: Incorporate text data from song lyrics
  • Ensemble Techniques: Implement stacking, boosting, and bagging
  • Deep Learning: Explore CNN and RNN architectures
  • Multi-modal Approach: Combine audio, lyrical, and social media data
  • Real-time Classification: Deploy model for live music classification

Research Extensions

  • Cross-cultural genre analysis
  • Temporal evolution of music genres
  • User preference integration
  • Streaming platform optimization

Contributing

We welcome contributions! Please see our contributing guidelines:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

References

  1. Elbir, A., & Aydin, N. (2020). Music genre classification and music recommendation by using deep learning. Electronics Letters, 56(12), 627–629.

  2. Li, Y., Zhang, Z., Ding, H., & Chang, L. (2023). Music genre classification based on fusing audio and lyric information. Multimedia Tools and Applications, 82(13), 20157–20176.

  3. Pelchat, N., & Gelowitz, C. M. (2020). Neural Network Music Genre Classification. Canadian Journal of Electrical and Computer Engineering, 43(3), 170–173.

Authors

Dilbar Isakova - dilbar.isakova@estudiantat.upc.edu

Mohamed Louai Bouzaher - mohamed.bouzaher@estudiantat.upc.edu

Supervisors:

  • Marta Arias Vicente
  • Carlos Escolano Peinado

Facultat d'Informàtica de Barcelona - Universitat Politècnica de Catalunya

License

This project is part of a Machine Learning course at UPC Barcelona. Please respect academic integrity guidelines when using this code.

Acknowledgments

  • Spotify for providing the comprehensive music dataset
  • Kaggle user 'mrmorj' for dataset curation
  • UPC Barcelona Faculty of Informatics
  • Open-source machine learning community

If you found this project helpful, please consider giving it a star!

Last updated: June 2024

About

A machine learning project for classifying music genres based on audio features extracted from Spotify's dataset. This project implements and compares multiple classification algorithms to predict musical genres with high accuracy.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors