-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
executable file
·152 lines (133 loc) · 4.62 KB
/
Copy pathmain.py
File metadata and controls
executable file
·152 lines (133 loc) · 4.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# main.py
import mlflow
import mlflow.sklearn
import argparse
import joblib
from model_pipeline import (
load_data,
prepare_data,
train_model,
evaluate_model,
save_prepared_data,
load_prepared_data,
)
# Définir un nom d'expérience MLflow
mlflow.set_experiment("medical_ocr_experiment")
# Variables globales
X_train, X_test, y_train, y_test, scaler, label_encoders, model = (
None,
None,
None,
None,
None,
None,
None,
)
def execute_command(
command,
train_path="churn-bigml-80.csv",
test_path="churn-bigml-20.csv",
model_path="model.pkl",
save_path=None,
):
"""Exécute la commande spécifiée (prepare, train, test)."""
global X_train, X_test, y_train, y_test, scaler, label_encoders, model
if command == "prepare":
# Charger et préparer les données
train_data, test_data = load_data(train_path, test_path)
X_train, X_test, y_train, y_test, scaler, label_encoders = prepare_data(
train_data, test_data
)
# Sauvegarder les données préparées
save_prepared_data(
X_train,
X_test,
y_train,
y_test,
scaler,
label_encoders,
"prepared_data.pkl",
)
elif command == "train":
try:
# Charger les données préparées
X_train, X_test, y_train, y_test, scaler, label_encoders = (
load_prepared_data("prepared_data.pkl")
)
except FileNotFoundError:
print(
"\n⚠ Fichier 'prepared_data.pkl' introuvable. Préparez d'abord les données avec la commande 'prepare'"
)
return
# Entraîner le modèle avec MLflow
print("\n# Entraînement du modèle avec MLflow...")
with mlflow.start_run():
model = train_model(X_train, y_train)
# Log des hyperparamètres
mlflow.log_param("algorithm", "Linear Regression")
mlflow.log_param("train_size", len(X_train))
# Log du modèle entraîné
mlflow.sklearn.log_model(model, "model")
print("\n✅ Modèle entraîné et enregistré sur MLflow")
# Sauvegarder le modèle dans un fichier
joblib.dump(model, model_path)
print(f"\n✅ Modèle sauvegardé dans '{model_path}'")
elif command == "test":
try:
# Charger les données préparées
X_train, X_test, y_train, y_test, scaler, label_encoders = (
load_prepared_data("prepared_data.pkl")
)
except FileNotFoundError:
print(
"\n⚠ Fichier 'prepared_data.pkl' introuvable. Préparez d'abord les données avec la commande 'prepare'"
)
return
try:
# Charger le modèle entraîné
model = joblib.load(model_path)
print(f"\n✅ Modèle chargé depuis '{model_path}'")
except FileNotFoundError:
print(
f"\n⚠ Fichier '{model_path}' introuvable. Entraînez d'abord le modèle avec la commande 'train'"
)
return
# Évaluer le modèle
print("\n# Évaluation du modèle avec MLflow...")
with mlflow.start_run():
mse, r2 = evaluate_model(model, X_test, y_test)
# Log des métriques de performance
mlflow.log_metric("Mean Squared Error", mse)
mlflow.log_metric("R² Score", r2)
print(f"\n✅ Mean Squared Error: {mse}")
print(f"✅ R² Score: {r2}")
print("\n✅ Métriques enregistrées sur MLflow")
# Point d'entrée du script
if __name__ == "__main__":
# Interface en ligne de commande
parser = argparse.ArgumentParser(
description="Exécuter des commandes pour entraîner et évaluer un modèle."
)
parser.add_argument(
"command", choices=["prepare", "train", "test"], help="Commande à exécuter."
)
parser.add_argument(
"--train_path",
default="churn-bigml-80.csv",
help="Chemin vers le fichier d'entraînement.",
)
parser.add_argument(
"--test_path",
default="churn-bigml-20.csv",
help="Chemin vers le fichier de test.",
)
parser.add_argument(
"--model_path",
default="model.pkl",
help="Chemin pour charger/sauvegarder le modèle.",
)
parser.add_argument("--save_path", help="Chemin pour sauvegarder les résultats.")
args = parser.parse_args()
execute_command(
args.command, args.train_path, args.test_path, args.model_path, args.save_path
)