Sopéna Alexis - Andrade Kalvin
# Rapport final TSMA
* Méthode utilisée : Arbre de décision avec sklearn
-> Paramètres par défaut.
-> Résulat sur Kaggle : 37.674%
* Méthode utilisée : Forêt aléatoire avec sklearn
-> Paramères par défaut.
-> Résultat sur kaggle : 54.191%
* Méthode utilisée : catboost
-> Paramètres par défaut.
-> Résultat sur kaggle : 60.229%
* Méthode utilisée : xgboost
-> Paramètres par défaut.
-> Résultat sur kaggle : 58.433%
* Méthode utilisée : lightGBM
-> Paramètres par défaut.
-> Résultat sur Kaggle : 61.626
* Méthode utilséee : xgboost
-> Paramètres```python
model = XGBClassifier(max_depth=7,learning_rate=0.1,gamma=0.25,reg_lambda=10,scale_pos_weight=3,subsample=0.8,colsample_bytree=0.5,objective="multi:softmax")```
-> Résulat sur kaggle : 60.279%
En jouant un peu sur les paramètres de xgboost nous avons réussi à gagner envion 2% sur l'accuracy
Nous avons essayé d'utiliser les données pré-entraîné par VGG pour xgboost pour cela nous avons flat les features. Le résultat obtenue sur kaggle est de 6% nous pensons que cela est du que notre méthode pour flat est incorrect :
```python=
x_train = xtrain.reshape(*xtrain.shape[:1],-1)
print(x_train.shape)
x_test = xtest.reshape(*xtest.shape[:1],-1)
print(x_test.shape)
```
### CNN avec données pré-entraîné par VGG
* Architecture utilisée :

-> résultat sur kaggle : 64.97%
Nous avons utilisé le paramètre callback de keras pour choisir le meilleur model de notre entraînement, ce qui nous a permis d'augmenter l'accuracy sur kaggle.
* Architecture utilisée :

-> résultat sur kaggle : 64.67%
Nous avons essayé d'utiliser une autre architecture cette fois-ci trouvé sur internet : https://towardsdatascience.com/cnns-for-audio-classification-6244954665ab
Comme on peut le voir ci-dessus on obtient la même accuracy plus ou moins, on a donc essayé d'utiliser la data augmentation. Pour cela nous avons suivi cette méthode : Pour chaque son on choisi un i, j aléatoire entre 0 et 31, qui correspond à une ligne et une colonne. On remplace les valeurs de la colonne et la ligne choisi par une constante, 0 dans notre cas.
En appliquant cette méthode l'accuracy n'a pas vraiment augmenter entre 62% et 64% sur kaggle, alors nous avons décidé de jouer sur les paramètres pour augmenter l'accuracy.
Les paramètres par défauts sont:
- Loss : categorical_crossentropy
- Activation de couches : relu
- Activation dernière couche : softmax
- optimizer = Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False, name="Adam"
- Epoch : 25
- Batch_size : 32
En baissant le learning rate de à 0.0001 et l'epsilon à 1e-08 nous obtenons notre meilleur résultat sur kaggle de 66,067%. La différence est surtout grâce au changement de l'epsilon.
En faisant plusieurs essais nous avons remarqué que l'accuracy sur kaggle pouvait varier entre 64% et 66. On explique cela par notre méthode de data augmentation qui est aléatoire et donc selon quelles lignes et colonnes sont choisies cela influence l'accuracy. Aussi par le fait qu'on split les données en les mélangeant donc dans certains cas on peut plus avoir de données avec des valeurs changées dans les données d'entraînement que dans les données de validation.
Le notebook joint avec ce rapport est notre meilleur modèle avec de la data augmentation.
Nous avons essayé d'utiliser les données pré-entraîné par openL3 mais nous avons eu un problème de RAM sur google colab.