mlmodels / backend /utils.py
sathishleo's picture
Restructure for HF Spaces: app.py at root, backend moved
3724af6
# backend/utils.py
import os
import json
import joblib
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix, roc_curve, auc
# Ensure directories exist
# Make sure multiple directories exist
def ensure_dirs(*paths):
for path in paths:
os.makedirs(path, exist_ok=True)
# Save JSON report
def save_json(data, path):
with open(path, "w") as f:
json.dump(data, f, indent=4)
# Save model pickle
def save_model(model, path):
joblib.dump(model, path)
# Load model pickle
def load_model(path):
return joblib.load(path)
# Plot Confusion Matrix
def plot_cm(y_true, y_pred, title="Confusion Matrix", save_path=None):
"""Plot confusion matrix and optionally save to file."""
cm = confusion_matrix(y_true, y_pred)
plt.figure(figsize=(6, 4))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")
plt.title(title)
plt.xlabel("Predicted")
plt.ylabel("Actual")
if save_path:
plt.savefig(save_path, bbox_inches="tight")
plt.close()
def plot_roc(y_true, y_proba, title="ROC Curve", save_path=None):
"""Plot ROC curve and optionally save to file."""
fpr, tpr, _ = roc_curve(y_true, y_proba)
roc_auc = auc(fpr, tpr)
plt.figure(figsize=(6, 4))
plt.plot(fpr, tpr, label=f"AUC = {roc_auc:.2f}")
plt.plot([0, 1], [0, 1], "r--")
plt.title(title)
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.legend()
if save_path:
plt.savefig(save_path, bbox_inches="tight")
plt.close()
def barplot_metric(df, metric, save_path, title):
plt.figure(figsize=(8,5))
sns.barplot(x="Model", y=metric, data=df)
plt.title(title)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig(save_path, bbox_inches='tight')
plt.close()
def lineplot_curves(curves, ylabel, title, save_path):
plt.figure()
for label, values in curves.items():
plt.plot(values, label=label)
plt.xlabel("Iterations")
plt.ylabel(ylabel) # Now ylabel is separate
plt.title(title)
plt.legend()
plt.savefig(save_path)
plt.close()