|
|
from sklearn.model_selection import GridSearchCV |
|
|
from sklearn.metrics import accuracy_score, balanced_accuracy_score, classification_report |
|
|
from sklearn.model_selection import KFold |
|
|
|
|
|
import warnings |
|
|
warnings.filterwarnings("ignore") |
|
|
|
|
|
import joblib |
|
|
import os |
|
|
import json |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
parameters = { "GradientBoostingClassifier": { |
|
|
"learning_rate": [0.01, 0.1, 0.5], |
|
|
"n_estimators": [50, 100, 200], |
|
|
"max_depth": [3, 5, 7] |
|
|
}, |
|
|
"XGBClassifier": { |
|
|
"learning_rate": [0.01, 0.1, 0.5], |
|
|
"n_estimators": [50, 100, 200], |
|
|
"max_depth": [3, 5, 7] |
|
|
}, |
|
|
"naive_bayes": { |
|
|
"alpha": [0.1, 0.5, 1.0] |
|
|
}, |
|
|
"LogisticRegression": { |
|
|
"penalty": ['l1', 'l2'], |
|
|
"C": [0.1, 1, 10] |
|
|
}, |
|
|
"RandomForestClassifier": { |
|
|
"n_estimators": [50, 100, 200], |
|
|
"max_depth": [None, 5, 10], |
|
|
"min_samples_split": [2, 5, 10] |
|
|
}, |
|
|
"svm": { |
|
|
"C": [0.1, 1, 10], |
|
|
"kernel": ['linear', 'rbf'], |
|
|
"gamma": ['scale', 'auto'] |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def traning_gridsearch(X_train, Y_train, X_test, Y_test, Model, name,classe, cv = 5): |
|
|
|
|
|
try : |
|
|
os.mkdir(f'traning_zone/mini_modèles_w/{classe}') |
|
|
try : |
|
|
os.mkdir(f'traning_zone/mini_modèles_w/{classe}/{name}') |
|
|
except FileExistsError: |
|
|
pass |
|
|
except FileExistsError: |
|
|
try : |
|
|
os.mkdir(f'traning_zone/mini_modèles_w/{classe}/{name}') |
|
|
except FileExistsError: |
|
|
pass |
|
|
|
|
|
kfold = KFold(n_splits=cv, shuffle=True, random_state=99999) |
|
|
|
|
|
|
|
|
grid_search = GridSearchCV(Model, parameters[name], scoring="accuracy",cv=kfold) |
|
|
|
|
|
grid_search.fit(X_train, Y_train) |
|
|
|
|
|
best_params =grid_search.best_params_ |
|
|
best_score = grid_search.best_score_ |
|
|
best_model = grid_search.best_estimator_ |
|
|
|
|
|
with open(f"traning_zone/mini_modèles_w/{classe}/{name}/best_score.json", "w") as jsonfile: |
|
|
json.dump(best_score, jsonfile) |
|
|
|
|
|
with open(f"traning_zone/mini_modèles_w/{classe}/{name}/best_params.json", "w") as jsonfile: |
|
|
json.dump(best_params, jsonfile) |
|
|
|
|
|
Y_pred = best_model.predict(X_test) |
|
|
|
|
|
score = balanced_accuracy_score(Y_test, Y_pred) |
|
|
|
|
|
with open(f"traning_zone/mini_modèles_w/{classe}/{name}/balanced_accuracy_score_score.json", "w") as jsonfile: |
|
|
json.dump(score, jsonfile) |
|
|
|
|
|
scores = classification_report(Y_test, Y_pred) |
|
|
|
|
|
with open(f"traning_zone/mini_modèles_w/{classe}/{name}/classification_report_score.json", "w") as jsonfil: |
|
|
json.dump(scores, jsonfil) |
|
|
|
|
|
return |