From 9e4229554d1ab0d8ce98ca54df2c116dd5a29af7 Mon Sep 17 00:00:00 2001
From: Mohamed Sebabti <momo.rcm59@gmail.com>
Date: Fri, 28 Feb 2025 10:57:22 +0100
Subject: [PATCH] grid search rn

---
 ml_rn.py | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/ml_rn.py b/ml_rn.py
index 857eaa1..92b2c7f 100644
--- a/ml_rn.py
+++ b/ml_rn.py
@@ -21,36 +21,50 @@ df = load_and_describe_data('data_sup_0popularity.csv')
 print(df.info())
 
 def train_mlp(df):
-    # 1. Séparation des features et de la cible
+     # 1. Séparation des features et de la cible
     X = df.drop(columns=["popularity", "id", "artists", "name", "release_date", "date_sortie", "duration_ms", "nom_artiste"])
     y = df['popularity']
 
     # 2. Séparation train/test
     X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
-    # 3. Normalisation des features (obligatoire pour MLP)
+    # 3. Normalisation des features
     scaler = StandardScaler()
     X_train_scaled = scaler.fit_transform(X_train)
     X_test_scaled = scaler.transform(X_test)
 
-    # 4. Définition et entraînement du modèle MLP
-    mlp = MLPRegressor(hidden_layer_sizes=(100, 50), activation='relu', solver='adam', max_iter=500, random_state=42)
-    mlp.fit(X_train_scaled, y_train)
+    # 4. Définition des hyperparamètres à tester
+    param_grid = {
+        'hidden_layer_sizes': [(50,), (100,), (100, 50), (100, 100)],
+        'activation': ['relu', 'tanh'],
+        'solver': ['adam', 'sgd'],
+        'learning_rate_init': [0.001, 0.01, 0.1],
+        'max_iter': [500]
+    }
 
-    # 5. Prédictions
-    y_pred = mlp.predict(X_test_scaled)
+    # 5. Recherche des meilleurs hyperparamètres avec GridSearchCV
+    mlp = MLPRegressor(random_state=42)
+    grid_search = GridSearchCV(mlp, param_grid, cv=3, scoring='r2', n_jobs=-1, verbose=2)
+    grid_search.fit(X_train_scaled, y_train)
 
-    # 6. Évaluation du modèle
+    # 6. Affichage des meilleurs paramètres
+    print("Meilleurs paramètres :", grid_search.best_params_)
+
+    # 7. Prédictions avec le meilleur modèle
+    best_mlp = grid_search.best_estimator_
+    y_pred = best_mlp.predict(X_test_scaled)
+
+    # 8. Évaluation du modèle
     mae = mean_absolute_error(y_test, y_pred)
     rmse = np.sqrt(mean_squared_error(y_test, y_pred))
     r2 = r2_score(y_test, y_pred)
 
-    print(f"📊 MLPRegressor - MAE: {mae:.2f}, RMSE: {rmse:.2f}, R²: {r2:.3f}")
+    print(f"📊 MLPRegressor Optimisé - MAE: {mae:.2f}, RMSE: {rmse:.2f}, R²: {r2:.3f}")
 
-    # 7. Ajout des prédictions au DataFrame original
+    # 9. Ajout des prédictions au DataFrame original
     df.loc[X_test.index, 'pred_mlp'] = y_pred
     print(df.head(40))
 
     return df
 
-train_mlp(df)
+train_mlp(df)
\ No newline at end of file
-- 
GitLab