From e16e27e9fd8875ca0a26e6b9375e3b2c5a2574a2 Mon Sep 17 00:00:00 2001 From: Drew Giffin Date: Mon, 20 Oct 2025 16:28:56 -0400 Subject: [PATCH] Added classification report and reordered targets --- images/classification_report.png | Bin 0 -> 16519 bytes images/confusion_matrix.png | Bin 20753 -> 20719 bytes main.py | 33 ++++++++++++++++++++++++------- 3 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 images/classification_report.png diff --git a/images/classification_report.png b/images/classification_report.png new file mode 100644 index 0000000000000000000000000000000000000000..db549be83192f22b75c69aa813ecce5130bd2eb2 GIT binary patch literal 16519 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 literal 20753 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 Yv(&A6x%yy#0?;-FPgg&ebxsLQ0FFc2lmGw# diff --git a/main.py b/main.py index 9f6ea01..393dee3 100644 --- a/main.py +++ b/main.py @@ -21,9 +21,10 @@ def main(): # exploratory data analysis # draw_plots(df_clean) + le = get_label_encoder(df) + # separate features and target - le = LabelEncoder() - X, y = separate_features_and_target(df_clean, le) + X, y = separate_features_and_target(df_clean) # split into train and test data X_train, X_test, y_train, y_test = train_test_split( @@ -43,7 +44,28 @@ def main(): evaluate_model(model, X, y_pred, y_test, le) draw_confusion_matrix(y_test, y_pred, le) + + draw_classification_report(y_test, y_pred, le) +def get_label_encoder(df): + le = LabelEncoder() + le.classes_ = np.array(df['Stress_Level'].cat.categories) + return le + +def draw_classification_report(y_test, y_pred, le): + report = classification_report(y_test, y_pred, output_dict=True, target_names=le.classes_) + df_report = pd.DataFrame(report).transpose() + + df_report.loc[le.classes_, ["precision", "recall", "f1-score"]].plot( + kind="bar", figsize=(8, 5), rot=0, color=["#4C72B0", "#55A868", "#C44E52"] + ) + plt.title("Classification Report Metrics") + plt.ylabel("Score") + plt.ylim(0, 1) + plt.legend(loc="lower right") + plt.tight_layout() + plt.show() + def draw_confusion_matrix(y_test, y_pred, le): y_test_decoded = le.inverse_transform(y_test) y_pred_decoded = le.inverse_transform(y_pred) @@ -58,18 +80,15 @@ def draw_confusion_matrix(y_test, y_pred, le): plt.ylabel("Actual") plt.title("Confusion Matrix") plt.tight_layout() - plt.savefig("images/confusion_matrix.png", dpi=300) # Save for README plt.show() def predict_target(model, X_test): y_pred = model.predict(X_test) return y_pred -def separate_features_and_target(df, le): +def separate_features_and_target(df): X = df.drop('Stress_Level', axis=1) - y_raw = df['Stress_Level'] - # encode target - y = le.fit_transform(y_raw) + y = df['Stress_Level'].cat.codes return X, y def evaluate_model(model, X, y_pred, y_test, le):