""" Lightweight deep baseline using sklearn MLPClassifier. Serves as a stronger nonlinear baseline when full EEGNet stack is unavailable. """ from pathlib import Path import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.neural_network import MLPClassifier from sklearn.metrics import accuracy_score, f1_score, roc_auc_score from src.preprocess import build_dataset_from_folder def main(): X0, y0 = build_dataset_from_folder("data/relaxed", label=0) X1, y1 = build_dataset_from_folder("data/focused", label=1) X = np.vstack([X0, X1]) y = np.concatenate([y0, y1]) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y ) model = Pipeline([ ("scaler", StandardScaler()), ("mlp", MLPClassifier( hidden_layer_sizes=(128, 64), activation="relu", alpha=1e-4, batch_size=64, learning_rate_init=1e-3, max_iter=200, random_state=42, early_stopping=True, )) ]) model.fit(X_train, y_train) pred = model.predict(X_test) proba = model.predict_proba(X_test)[:, 1] metrics = { "model": "MLP", "accuracy": float(accuracy_score(y_test, pred)), "f1": float(f1_score(y_test, pred)), "auc": float(roc_auc_score(y_test, proba)), } out = Path("outputs") out.mkdir(exist_ok=True) pd.DataFrame([metrics]).to_csv(out / "deep_baseline_results.csv", index=False) print(metrics) if __name__ == "__main__": main()