From b7ae7c60a11d70fa97e5f676b02453848d4db8bc Mon Sep 17 00:00:00 2001 From: Joaquin Torres Bravo Date: Wed, 8 May 2024 16:43:33 +0200 Subject: [PATCH] fixed minor issues, renaming --- explicability/shap_vals.py | 13 ++ .../hyperparam_tuning.py | 14 +- .../output/hyperparam.xlsx | Bin {models => model_selection}/test_models.py | 0 models/eval_models.py | 147 ------------------ models/output/cross_val_res.xlsx | Bin 9795 -> 0 bytes models/shap.py | 10 -- 7 files changed, 20 insertions(+), 164 deletions(-) create mode 100644 explicability/shap_vals.py rename {models => model_selection}/hyperparam_tuning.py (94%) rename {models => model_selection}/output/hyperparam.xlsx (100%) rename {models => model_selection}/test_models.py (100%) delete mode 100644 models/eval_models.py delete mode 100644 models/output/cross_val_res.xlsx delete mode 100644 models/shap.py diff --git a/explicability/shap_vals.py b/explicability/shap_vals.py new file mode 100644 index 0000000..09a7cda --- /dev/null +++ b/explicability/shap_vals.py @@ -0,0 +1,13 @@ +# Libraries +# -------------------------------------------------------------------------------------------------------- +import pandas as pd +import numpy as np +from xgboost import XGBClassifier +from sklearn.metrics import confusion_matrix +from sklearn.metrics import f1_score, make_scorer, precision_score, recall_score, accuracy_score +from sklearn.ensemble import RandomForestClassifier, BaggingClassifier, AdaBoostClassifier +from sklearn.neural_network import MLPClassifier +from sklearn.svm import SVC +from sklearn.linear_model import LogisticRegression +from sklearn.tree import DecisionTreeClassifier +# -------------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/models/hyperparam_tuning.py b/model_selection/hyperparam_tuning.py similarity index 94% rename from models/hyperparam_tuning.py rename to model_selection/hyperparam_tuning.py index 311a718..a404562 100644 --- a/models/hyperparam_tuning.py +++ b/model_selection/hyperparam_tuning.py @@ -86,10 +86,10 @@ if __name__ == "__main__": models_1 = {"DT" : DecisionTreeClassifier(), "RF" : RandomForestClassifier(), "Bagging" : BaggingClassifier(), - "AB" : AdaBoostClassifier(), + "AB" : AdaBoostClassifier(algorithm='SAMME'), "XGB": XGBClassifier(), "LR" : LogisticRegression(max_iter=1000), - "ElNet" : LogisticRegression(max_iter=1000, penalty='elasticnet'), + # "ElNet" : LogisticRegression(max_iter=1000, penalty='elasticnet'), "SVM" : SVC(probability=True), "MLP" : MLPClassifier(max_iter=500) } @@ -98,12 +98,12 @@ if __name__ == "__main__": models_2 = {"DT" : DecisionTreeClassifier(class_weight='balanced'), "RF" : RandomForestClassifier(class_weight='balanced'), "Bagging" : BaggingClassifier(estimator= DecisionTreeClassifier(class_weight='balanced')), - "AB" : AdaBoostClassifier(estimator= DecisionTreeClassifier(class_weight='balanced')), + "AB" : AdaBoostClassifier(estimator= DecisionTreeClassifier(class_weight='balanced'), algorithm='SAMME'), # "XGB": XGBClassifier(), # <- "LR" : LogisticRegression(max_iter=1000, class_weight='balanced'), - "ElNet" : LogisticRegression(max_iter=1000, penalty='elasticnet', class_weight='balanced'), + # "ElNet" : LogisticRegression(max_iter=1000, penalty='elasticnet', class_weight='balanced'), "SVM" : SVC(probability=True, class_weight='balanced'), - # "MLP" : MLPClassifier(max_iter=500) + # "MLP" : MLPClassifier(max_iter=500) # <- } # Hyperparameter tuning setup @@ -124,9 +124,9 @@ if __name__ == "__main__": "XGB": {'n_estimators': randint(100, 1000), 'max_depth': randint(3, 10), 'learning_rate': uniform(0.01, 0.3)}, - "LR": {'penalty': ['l1', 'l2', None], + "LR": {'penalty': ['l1', 'l2', 'elasticnet', None], 'solver': ['lbfgs', 'sag', 'saga']}, - "EL": {'solver': ['lbfgs', 'sag', 'saga']}, + # "ElNet": {'solver': ['lbfgs', 'sag', 'saga']}, "SVM": {'C': uniform(0.8, 1.2), 'kernel': ['linear', 'poly', 'rbf', 'sigmoid']}, "MLP": {'activation': ['identity', 'logistic', 'tanh', 'relu'], diff --git a/models/output/hyperparam.xlsx b/model_selection/output/hyperparam.xlsx similarity index 100% rename from models/output/hyperparam.xlsx rename to model_selection/output/hyperparam.xlsx diff --git a/models/test_models.py b/model_selection/test_models.py similarity index 100% rename from models/test_models.py rename to model_selection/test_models.py diff --git a/models/eval_models.py b/models/eval_models.py deleted file mode 100644 index ad3a781..0000000 --- a/models/eval_models.py +++ /dev/null @@ -1,147 +0,0 @@ -""" - Selecting best models through cross validation and hyperparameter tunning - for each method: - 1. Original training dataset - 2. Original training dataset - Cost sensitive - 3. Oversampling - 4. Undersampling -""" - -# Libraries -# -------------------------------------------------------------------------------------------------------- -import pandas as pd -import numpy as np -from xgboost import XGBClassifier -from sklearn.metrics import confusion_matrix -from sklearn.metrics import f1_score, make_scorer, precision_score, recall_score -from sklearn.model_selection import StratifiedKFold, cross_validate -from sklearn.ensemble import RandomForestClassifier, BaggingClassifier, AdaBoostClassifier -from sklearn.neural_network import MLPClassifier -from sklearn.svm import SVC -from sklearn.linear_model import LogisticRegression -from sklearn.tree import DecisionTreeClassifier -# -------------------------------------------------------------------------------------------------------- - -def read_data(): - import numpy as np - - # Load test data - X_test_pre = np.load('gen_train_data/data/output/pre/X_test_pre.npy', allow_pickle=True) - y_test_pre = np.load('gen_train_data/data/output/pre/y_test_pre.npy', allow_pickle=True) - X_test_post = np.load('gen_train_data/data/output/post/X_test_post.npy', allow_pickle=True) - y_test_post = np.load('gen_train_data/data/output/post/y_test_post.npy', allow_pickle=True) - - # Load ORIGINAL training data - X_train_pre = np.load('gen_train_data/data/output/pre/X_train_pre.npy', allow_pickle=True) - y_train_pre = np.load('gen_train_data/data/output/pre/y_train_pre.npy', allow_pickle=True) - X_train_post = np.load('gen_train_data/data/output/post/X_train_post.npy', allow_pickle=True) - y_train_post = np.load('gen_train_data/data/output/post/y_train_post.npy', allow_pickle=True) - - # Load oversampled training data - X_train_over_pre = np.load('gen_train_data/data/output/pre/X_train_over_pre.npy', allow_pickle=True) - y_train_over_pre = np.load('gen_train_data/data/output/pre/y_train_over_pre.npy', allow_pickle=True) - X_train_over_post = np.load('gen_train_data/data/output/post/X_train_over_post.npy', allow_pickle=True) - y_train_over_post = np.load('gen_train_data/data/output/post/y_train_over_post.npy', allow_pickle=True) - - # Load undersampled training data - X_train_under_pre = np.load('gen_train_data/data/output/pre/X_train_under_pre.npy', allow_pickle=True) - y_train_under_pre = np.load('gen_train_data/data/output/pre/y_train_under_pre.npy', allow_pickle=True) - X_train_under_post = np.load('gen_train_data/data/output/post/X_train_under_post.npy', allow_pickle=True) - y_train_under_post = np.load('gen_train_data/data/output/post/y_train_under_post.npy', allow_pickle=True) - - data_dic = { - "X_test_pre": X_test_pre, - "y_test_pre": y_test_pre, - "X_test_post": X_test_post, - "y_test_post": y_test_post, - "X_train_pre": X_train_pre, - "y_train_pre": y_train_pre, - "X_train_post": X_train_post, - "y_train_post": y_train_post, - "X_train_over_pre": X_train_over_pre, - "y_train_over_pre": y_train_over_pre, - "X_train_over_post": X_train_over_post, - "y_train_over_post": y_train_over_post, - "X_train_under_pre": X_train_under_pre, - "y_train_under_pre": y_train_under_pre, - "X_train_under_post": X_train_under_post, - "y_train_under_post": y_train_under_post, - } - - return data_dic - -if __name__ == "__main__": - - # Reading training data - data_dic = read_data() - - # Defining the models to train - # -------------------------------------------------------------------------------------------------------- - # 1. No class weight - models_1 = {#"DT" : DecisionTreeClassifier(), - "RF" : RandomForestClassifier(n_estimators=50), - # "Bagging" : BaggingClassifier(), - # "AB" : AdaBoostClassifier(), - # "XGB": XGBClassifier(), - # "LR" : LogisticRegression(max_iter=1000), - # "ElNet" : LogisticRegression(max_iter=1000, penalty='elasticnet'), - # "SVM" : SVC(probability=True), - # "MLP" : MLPClassifier(max_iter=500), - } - - # 2. Class weight - models_2 = {#"DT" : DecisionTreeClassifier(class_weight='balanced'), - "RF" : RandomForestClassifier(n_estimators=50, class_weight='balanced'), - # "Bagging" : BaggingClassifier(), # <- - # "AB" : AdaBoostClassifier(), # <- - # "XGB": XGBClassifier(), # <- - # "LR" : LogisticRegression(max_iter=1000, class_weight='balanced'), - # "ElNet" : LogisticRegression(max_iter=1000, penalty='elasticnet', class_weight='balanced'), - # "SVM" : SVC(probability=True, class_weight='balanced'), - # "MLP" : MLPClassifier(max_iter=500), # <- - } - # -------------------------------------------------------------------------------------------------------- - - # Setup - # -------------------------------------------------------------------------------------------------------- - # Scorings to use for model evaluation - scorings = {'recall':make_scorer(recall_score), 'precision':make_scorer(precision_score)} - # Defining cross-validation protocol - cv = StratifiedKFold(n_splits=10, shuffle=True, random_state=1) - result_cols = [f"{model}_{metric}" for model in models_1.keys() for metric in ['PREC', 'REC']] - method_names = { - 0: "ORIG", - 1: "ORIG_CW", - 2: "OVER", - 3: "UNDER" - } - # -------------------------------------------------------------------------------------------------------- - - # Evaluating performance through cross validation and exporting results - # -------------------------------------------------------------------------------------------------------- - # Store each df as a sheet in an excel file - sheets_dict = {} - for i, group in enumerate(['pre', 'post']): - for j, method in enumerate(['', '', 'over_', 'under_']): - # Get dataset based on group and method - X = data_dic['X_train_' + method + group] - y = data_dic['y_train_' + method + group] - # Use group of models with class weight if needed - models = models_2 if j == 2 else models_1 - # Save results in dataframe (10 columns since 10-fold cv) - res_df = pd.DataFrame(columns=range(1,11), index=result_cols) - for model_name, model in models.items(): - cv_scores = cross_validate(model, X, y, scoring=scorings, cv=cv, return_train_score=True, n_jobs=1) - res_df.loc[model_name + '_PREC'] = list(np.around(np.array(cv_scores["test_precision"]),4)) - res_df.loc[model_name + '_REC'] = list(np.around(np.array(cv_scores["test_recall"]),4)) - - # Store the DataFrame in the dictionary with a unique key for each sheet - sheet_name = f"{group}_{method_names[j]}" - sheets_dict[sheet_name] = res_df - # Write results to Excel file - with pd.ExcelWriter('./training_models/output/cross_val_res.xlsx') as writer: - for sheet_name, data in sheets_dict.items(): - data.to_excel(writer, sheet_name=sheet_name) - # -------------------------------------------------------------------------------------------------------- - - diff --git a/models/output/cross_val_res.xlsx b/models/output/cross_val_res.xlsx deleted file mode 100644 index f1c0c3b472619e5938ec3f287c8972f748dd36ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9795 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 diff --git a/models/shap.py b/models/shap.py deleted file mode 100644 index afca58d..0000000 --- a/models/shap.py +++ /dev/null @@ -1,10 +0,0 @@ -# Libraries -# -------------------------------------------------------------------------------------------------------- -import shap -import numpy as np -# -------------------------------------------------------------------------------------------------------- - -# Load test data -X_test_pre = np.load('../gen_train_data/data/output/pre/X_test_pre.npy', allow_pickle=True) - -print(list(X_test_pre.columns.values)) \ No newline at end of file -- 2.24.1