-
Notifications
You must be signed in to change notification settings - Fork 0
ARCHITECTURE
graph TB
A[📥 Input Layer<br/>50 Features] --> B[🔧 Preprocessing]
B --> C[🧠 Dense Layer 1<br/>128 Neurons]
C --> D[💧 Dropout 30%]
D --> E[🧠 Dense Layer 2<br/>64 Neurons]
E --> F[💧 Dropout 20%]
F --> G[🧠 Dense Layer 3<br/>32 Neurons]
G --> H[📤 Output Layer<br/>1 Neuron]
H --> I[✅ Prediction]
style A fill:#e3f2fd
style C fill:#f3e5f5
style E fill:#f3e5f5
style G fill:#f3e5f5
style H fill:#e8f5e9
style I fill:#fff3e0
|
|
Input(shape=(50,)) # 50 features📋 View Input Features Categories
| Category | Features | Examples |
|---|---|---|
| 👥 Demographic | 5 | Age, Gender, Education |
| 🏃 Behavioral | 15 | Activity, Sleep, Diet |
| 😊 Symptoms | 20 | Mood, Energy, Focus |
| 🔬 Clinical | 10 | Medical history, Medications |
Dense(128, activation='relu', kernel_regularizer=l2(0.01))| Property | Value | Purpose |
|---|---|---|
| 🔢 Neurons | 128 | Feature extraction |
| ⚡ Activation | ReLU | Non-linearity |
| 🎯 Regularization | L2 (0.01) | Prevent overfitting |
| 📊 Output Shape | (None, 128) | - |
Visualization:
Input (50) → [128 neurons with ReLU] → Output (128)
Dropout(0.3)💧 Dropout Rate: 30% of neurons randomly deactivated during training
Purpose: Reduce overfitting and improve generalization
Dense(64, activation='relu', kernel_regularizer=l2(0.01))| Property | Value |
|---|---|
| 🔢 Neurons | 64 |
| ⚡ Activation | ReLU |
| 🎯 Regularization | L2 (0.01) |
| 📊 Parameters | 8,256 |
Dropout(0.2)💧 Dropout Rate: 20%
Dense(32, activation='relu', kernel_regularizer=l2(0.01))| Property | Value |
|---|---|
| 🔢 Neurons | 32 |
| ⚡ Activation | ReLU |
| 🎯 Regularization | L2 (0.01) |
| 📊 Parameters | 2,080 |
Dense(1, activation='sigmoid')| Property | Value | Purpose |
|---|---|---|
| 🔢 Neurons | 1 | Binary classification |
| ⚡ Activation | Sigmoid | Probability output (0-1) |
| 📊 Output | Single value | Depression probability |
graph LR
A[📥 Raw Data] --> B[🧹 Clean]
B --> C[📊 Impute]
C --> D[🏷️ Encode]
D --> E[📏 Scale]
E --> F[✨ Engineer]
F --> G[✅ Ready]
style A fill:#ffebee
style G fill:#e8f5e9
| Step | Method | Description |
|---|---|---|
| 1️⃣ Missing Values | Median/Mode | Impute missing data |
| 2️⃣ Encoding | One-Hot | Convert categorical features |
| 3️⃣ Scaling | StandardScaler | Normalize numerical features |
| 4️⃣ Feature Engineering | Polynomial | Create interaction terms |
| 5️⃣ Dimensionality | PCA (optional) | Reduce features if needed |
💻 View Preprocessing Code
from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
# Numerical preprocessing
num_imputer = SimpleImputer(strategy='median')
scaler = StandardScaler()
# Categorical preprocessing
cat_imputer = SimpleImputer(strategy='most_frequent')
encoder = OneHotEncoder(handle_unknown='ignore')
# Pipeline
preprocessor = ColumnTransformer([
('num', Pipeline([
('impute', num_imputer),
('scale', scaler)
]), numerical_features),
('cat', Pipeline([
('impute', cat_imputer),
('encode', encoder)
]), categorical_features)
])
# Optimizer
optimizer = Adam(
learning_rate=0.001,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07
) |
# Callbacks
callbacks = [
EarlyStopping(patience=10),
ModelCheckpoint('best_model.h5'),
ReduceLROnPlateau(factor=0.5)
] |
| Parameter | Value | Rationale |
|---|---|---|
| 📚 Training Samples | 8,000 | 80% of dataset |
| ✅ Validation Split | 20% | Monitor overfitting |
| 🔁 Batch Size | 32 | Balance speed/accuracy |
| 🔄 Max Epochs | 100 | Early stopping enabled |
| ⏱️ Actual Epochs | 87 | Stopped early |
| ⚖️ Class Weights | {0: 1.0, 1: 1.5} | Handle imbalance |
Epoch 1/100
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
loss: 0.542 - accuracy: 0.712 - val_loss: 0.498 - val_accuracy: 0.754
Epoch 25/100
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
loss: 0.312 - accuracy: 0.854 - val_loss: 0.289 - val_accuracy: 0.871
Epoch 50/100
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
loss: 0.267 - accuracy: 0.881 - val_loss: 0.271 - val_accuracy: 0.887
Epoch 87/100 ⭐ BEST
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
loss: 0.245 - accuracy: 0.892 - val_loss: 0.267 - val_accuracy: 0.892
Early stopping triggered!
| Metric | Initial | Final | Improvement |
|---|---|---|---|
| 📉 Training Loss | 0.542 | 0.245 | ⬇️ 54.8% |
| 📈 Training Accuracy | 71.2% | 89.2% | ⬆️ 18.0% |
| 📉 Val Loss | 0.498 | 0.267 | ⬇️ 46.4% |
| 📈 Val Accuracy | 75.4% | 89.2% | ⬆️ 13.8% |
| Model | Architecture | Accuracy | Training Time | Use Case |
|---|---|---|---|---|
| 🥉 Baseline | Logistic Regression | 78.3% | 2 min | Quick baseline |
| 🥈 Standard | Random Forest | 84.5% | 15 min | Balanced approach |
| 🥇 Advanced | Deep NN (Current) | 89.2% | 45 min | Best performance |
| 🏆 Ensemble | Stacked Models | 90.1% | 90 min | Maximum accuracy |
graph TD
A{Need? } --> B[Quick Test]
A --> C[Production]
A --> D[Research]
B --> E[Baseline Model]
C --> F[Advanced Model ⭐]
D --> G[Ensemble Model]
style F fill:#4CAF50
|
| Rank | Feature | Importance | |: ----:|---------|: ----------:| | 🥇 | Mood indicators | ████████████ 18% | | 🥈 | Sleep duration | ██████████ 14% | | 🥉 | Energy levels | ████████ 12% | | 4️⃣ | Social interaction | ██████ 9% | | 5️⃣ | Physical activity | █████ 8% | | 6️⃣ | Concentration | ████ 7% | | 7️⃣ | Interest level | ███ 6% | | 8️⃣ | Self-esteem | ███ 5% | |
| Rank | Feature | Importance | |:----:|---------|: ----------:| | 9️⃣ | Stress indicators | ███ 5% | | 🔟 | Age | ██ 4% | | 1️⃣1️⃣ | Eating patterns | ██ 3% | | 1️⃣2️⃣ | Screen time | ██ 3% | | 1️⃣3️⃣ | Work satisfaction | ██ 2% | | 1️⃣4️⃣ | Relationship status | █ 2% | | 1️⃣5️⃣ | Exercise frequency | █ 2% | |
|
Stabilizes learning Faster convergence |
Prevents overfitting Better generalization |
Controls complexity Reduces variance |
|
Adaptive learning Fine-tuned convergence |
Optimal training time Prevents overfitting |
Handles imbalance Fair predictions |
🔍 View Complete Model Definition
import tensorflow as tf
from tensorflow.keras import layers, models, regularizers
def build_model(input_dim=50):
"""
Build the Advanced Depression Predictor Model
Args:
input_dim: Number of input features
Returns:
Compiled Keras model
"""
model = models.Sequential([
# Input layer
layers.Input(shape=(input_dim,)),
# Hidden layer 1
layers.Dense(
128,
activation='relu',
kernel_regularizer=regularizers.l2(0.01),
name='dense_1'
),
layers. Dropout(0.3, name='dropout_1'),
# Hidden layer 2
layers.Dense(
64,
activation='relu',
kernel_regularizer=regularizers.l2(0.01),
name='dense_2'
),
layers.Dropout(0.2, name='dropout_2'),
# Hidden layer 3
layers.Dense(
32,
activation='relu',
kernel_regularizer=regularizers.l2(0.01),
name='dense_3'
),
# Output layer
layers. Dense(1, activation='sigmoid', name='output')
])
# Compile model
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
loss='binary_crossentropy',
metrics=['accuracy', tf.keras.metrics.AUC(name='auc')]
)
return model
# Build and view model
model = build_model()
model.summary()| Topic | Link |
|---|---|
| 📊 Performance Results | Performance Metrics |
| 🔌 API Integration | API Reference |
| 💻 Usage Examples | Usage Guide |
| 💾 Dataset Details | Dataset Information |