Anàlisi de dades exhaustiu, amb el dataset :https://www.kaggle.com/purumalgi/music-genre-classification
URL: kaggle
El dataset conté informació de cançons com ara el nom de l'autor, el nom de la cançó, la instrumentalitat i el tempo d'entre d'altres. Tenim 17996 dades amb 17 atributs. Un 11% d'ells és categòric i els altres són numèrics. Les dades no estan normalitzades i hi ha un 24.3% de mostres amb NA
Volem crear un classificador bo per determinar el gènere musical d'una cançó donades les seves característiques.
Primer vàrem aplicar un preprocessat bàsic i vam generar els models i després, vam aplicar hyperparameter tunning pels millors models per veure si érem capaços de millorar el accuracy. Després vam tornar al preprocessament per trobar quina configuració era l'òptima per la nostra base de dades i vam tornar a crear els models.
Per preparar el dataset, hem codificat el nom de l'artista, eliminat el nom de la cançó, omplert els NA amb -1 i estandarditzant les dades. Amb aquest preprocessament és amb el que hem aconseguit els millors resultats.
Model | Hiperparametres | Mètrica | Temps |
---|---|---|---|
OneVsOneClassifier | LogisticRegression() | 49.4% | 1.467s |
OneVsRestClassifier | LogisticRegression() | 49.1% | 0.816s |
OutputCodeClassifier | LogisticRegression() | 42.0% | 0.950s |
KNeighborsClassifier | n_neighbors=45 | 49.6% | 0.177s |
KNeighborsClassifier | n_neighbors=45, weights="distance" | 44.9% | 0.209s |
DecisionTreeClassifier | criterion= 'entropy', max_depth= None, max_features= 14, min_samples_leaf= 61, splitter= 'best' | 48.3% | 0.625s |
RandomForestClassifier | criterion= 'entropy', max_depth= 10, max_features= 'sqrt', n_estimators= 1000 | 53.1% | 123.250s |
XGBClassifier | colsample_bytree= 0.8011935532275019, gamma= 0.0967861901103601, learning_rate= 0.06881623529678811, max_depth= 3, n_estimators= 114, objective= 'o', subsample= 0.8160718933070602 | 69.3% | 7.347s |
Stacked | Model creat a partir del OneVsOneClassifier, RandomForestClassifier, KNeighborsClassifier i XGBClassifier | 55.3% | 31.735s |
Per tal de fer una prova, primer hem d'executar el codi principal per generar el .db i després l'arxiu Demo.ipynb. Aquest arxiu ens permet classificar noves cançons que no tenen un gènere associat.
El millor model basant-nos amb l'accuracy és el XGBClassifier però, un cop fem la Cross Validation, ens adonem que el Stacked és millor, ja que no comet overfitting. Hi ha pocs treballs sobre aquest dataset, però tots aconsegueixen entorn el 50% de accuracy.
En un futur seria interessant classificar més mostres d'entrenament dels gèneres amb menys mostres. Això permetria crear un model més generalitzat i robust.