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