Spaces:
Sleeping
Sleeping
| import joblib | |
| import numpy as np | |
| import sys | |
| import os | |
| # --------------------------------------------------------- | |
| # 1. SETUP - DEFINING CLASSES FOR PICKLE LOADING | |
| # --------------------------------------------------------- | |
| # Try to import real classes first to avoid pickle errors | |
| try: | |
| from predict_mental_health import ( | |
| RewardModel, VariationalPreferenceLearning, ActiveLearner, | |
| EnhancedQuantumTransform, SuperEnsemble95 | |
| ) | |
| print("✓ Imported classes from predict_mental_health") | |
| # Alias to __main__ for pickle compatibility | |
| if __name__ == "__main__": | |
| import sys | |
| current_module = sys.modules[__name__] | |
| setattr(current_module, 'SuperEnsemble95', SuperEnsemble95) | |
| setattr(current_module, 'EnhancedQuantumTransform', EnhancedQuantumTransform) | |
| setattr(current_module, 'RewardModel', RewardModel) | |
| setattr(current_module, 'VariationalPreferenceLearning', VariationalPreferenceLearning) | |
| setattr(current_module, 'ActiveLearner', ActiveLearner) | |
| except ImportError: | |
| print("⚠ Could not import classes. Using dummies (This might fail if pickle expects logic).") | |
| # Dummies if file is missing (unlikely in this context) | |
| class RewardModel: | |
| def __init__(self, n_features): pass | |
| class VariationalPreferenceLearning: | |
| def __init__(self, n_features, n_latent): pass | |
| class ActiveLearner: | |
| def __init__(self, n_queries=20): pass | |
| class EnhancedQuantumTransform: | |
| def __init__(self, n_features): pass | |
| def transform(self, X): return X | |
| class SuperEnsemble95: | |
| def __init__(self, n_features, n_classes): pass | |
| # --------------------------------------------------------- | |
| # 2. VALIDATION LOGIC | |
| # --------------------------------------------------------- | |
| def load_model_and_scaler(name, model_path, scaler_path): | |
| try: | |
| model = joblib.load(model_path) | |
| scaler = joblib.load(scaler_path) | |
| return model, scaler | |
| except Exception as e: | |
| print(f"✗ Failed to load {name}: {e}") | |
| return None, None | |
| def run_test(name, model, scaler, inputs, feature_names): | |
| print(f"\n--- Testing {name} ---") | |
| print(f"Input: {dict(zip(feature_names, inputs[0]))}") | |
| try: | |
| # Scale | |
| X_scaled = scaler.transform(inputs) | |
| # Predict | |
| pred = model.predict(X_scaled)[0] | |
| proba = model.predict_proba(X_scaled)[0] | |
| print(f"Prediction: {pred}") | |
| print(f"Probabilities: {proba}") | |
| print(f"Result: {'POSITIVE/HIGH' if pred==1 else 'NEGATIVE/LOW'} (Conf: {max(proba):.2f})") | |
| except Exception as e: | |
| print(f"Error during inference: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| if __name__ == "__main__": | |
| MODEL_DIR = "model" | |
| # ----------------------------------------------------- | |
| # SCENARIO 1: SLEEP QUALITY | |
| # User Input: Age 25, Male, Screen 6h, Night 2h, Social 3h, Stress 15 | |
| # Features: [age, gender_enc, screen_time_hours, screen_time_night_hours, social_media_hours, stress_score] | |
| # Gender Enc: Female=0, Male=1 | |
| # ----------------------------------------------------- | |
| sleep_model, sleep_scaler = load_model_and_scaler("Sleep", f"{MODEL_DIR}/students_sleep_model.joblib", f"{MODEL_DIR}/students_sleep_scaler.joblib") | |
| if sleep_model: | |
| inputs = np.array([[25, 1, 6.0, 2.0, 3.0, 15]]) | |
| run_test("Sleep Quality", sleep_model, sleep_scaler, inputs, | |
| ["Age", "Gender(M=1)", "Screen", "NightScreen", "Social", "Stress"]) | |
| # ----------------------------------------------------- | |
| # SCENARIO 2: DEPRESSION | |
| # User Input: Age 25, Male, Student, Social 3h, Instagram, PHQ9=5, GAD7=5 (GAD7 from anxiety form context usually) | |
| # Features: [age, gender_enc, role_enc, social_media_hours, platform_enc, phq9_score, gad7_score] | |
| # Mappings from app.py: | |
| # gender: male=1 | |
| # role: student=2 | |
| # platform: instagram=1 | |
| # ----------------------------------------------------- | |
| dep_model, dep_scaler = load_model_and_scaler("Depression", f"{MODEL_DIR}/depression_model.joblib", f"{MODEL_DIR}/depression_scaler.joblib") | |
| if dep_model: | |
| # Note: Screenshot shows PHQ9=5. GAD7 input is in next form but likely similar low value? Assuming 5. | |
| inputs = np.array([[25, 1, 2, 3.0, 1, 5, 5]]) | |
| run_test("Depression Screening", dep_model, dep_scaler, inputs, | |
| ["Age", "Gender", "Role", "Social", "Platform", "PHQ9", "GAD7"]) | |
| # ----------------------------------------------------- | |
| # SCENARIO 3: ANXIETY | |
| # Same inputs as above relative to profile | |
| # ----------------------------------------------------- | |
| anx_model, anx_scaler = load_model_and_scaler("Anxiety", f"{MODEL_DIR}/anxiety_model.joblib", f"{MODEL_DIR}/anxiety_scaler.joblib") | |
| if anx_model: | |
| inputs = np.array([[25, 1, 2, 3.0, 1, 5, 5]]) | |
| run_test("Anxiety Screening", anx_model, anx_scaler, inputs, | |
| ["Age", "Gender", "Role", "Social", "Platform", "PHQ9", "GAD7"]) | |
| # ----------------------------------------------------- | |
| # SCENARIO 4: BURNOUT | |
| # User Input: Age 35, Male, Healthcare Worker, Stress 20, Work 50h, Patients 70, MBSR No | |
| # Features: [age, gender_enc, role_enc, stress_score, work_hours_per_week, patient_load_per_week, mbsr_participation] | |
| # Mappings: | |
| # gender: male=1 | |
| # role: healthcare_worker=0 | |
| # mbsr: no=0 | |
| # ----------------------------------------------------- | |
| burn_model, burn_scaler = load_model_and_scaler("Burnout", f"{MODEL_DIR}/burnout_model.joblib", f"{MODEL_DIR}/burnout_scaler.joblib") | |
| if burn_model: | |
| inputs = np.array([[35, 1, 0, 20, 50, 70, 0]]) | |
| run_test("Burnout Risk", burn_model, burn_scaler, inputs, | |
| ["Age", "Gender", "Role", "Stress", "WorkHrs", "Patients", "MBSR"]) | |