# Wearable Emotion Recognition Eval

> This evaluation protocol assesses a multimodal fusion model's ability to classify emotional and stress states from wearable physiological signals. It probes the model's robustness across different data collection settings, subject variability, and varying label granularities (binary vs. multi-class affect). Use when the user wants to benchmark on WESAD, SWELL-KW, CASE, or asks about evaluating this task. Reports accuracy, macro-F1.

- Skill: `qhjqhj00/wearable-emotion-recognition-eval` (Agent Skill)
- Install (CLI): `npx skillmds add qhjqhj00/wearable-emotion-recognition-eval`
- Raw SKILL.md: https://api.skillmd.com/api/skills/qhjqhj00/wearable-emotion-recognition-eval/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: qhjqhj00 (https://skillmd.com/u/qhjqhj00)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/qhjqhj00/wearable-emotion-recognition-eval

---


# wearable-emotion-recognition-eval

> AttX: Attentive Cross-Connections for Fusion of Wearable Signals in Emotion Recognition — Bhatti et al. (2022) (arXiv:2206.04625, 2022)

## What this evaluates

This evaluation protocol assesses a multimodal fusion model's ability to classify emotional and stress states from wearable physiological signals. It probes the model's robustness across different data collection settings, subject variability, and varying label granularities (binary vs. multi-class affect).

## Datasets

- **WESAD** — total ?; splits: train (-1), val (-1), test (-1)
- **SWELL-KW** — total ?; splits: train (-1), val (-1), test (-1)
- **CASE** — total ?; splits: train (-1), val (-1), test (-1)

## Metrics

- `accuracy` **(primary)** — range: [0, 1]
  - Standard classification accuracy: the proportion of correctly predicted labels out of the total number of instances.
- `macro-F1` **(primary)** — range: [0, 1]
  - Macro-averaged F1-score: the unweighted mean of the F1-scores computed for each class independently, treating all classes equally regardless of frequency.

## Input / output format

**Input**: 10-second windows (60% overlap) of pre-processed physiological signals (ECG, EDA, BVP, RESP, ST) resampled to 256 Hz, stacked into arrays.

**Output**: Predicted class label corresponding to the affect state (e.g., stress/non-stress, neutral/stress/amusement, or low/high arousal).

## Scoring recipe

```python
def compute_metrics(y_true, y_pred):
    accuracy = np.mean(y_true == y_pred)
    classes = np.unique(y_true)
    f1_scores = []
    for c in classes:
        tp = np.sum((y_pred == c) & (y_true == c))
        fp = np.sum((y_pred == c) & (y_true != c))
        fn = np.sum((y_pred != c) & (y_true == c))
        prec = tp / (tp + fp + 1e-8)
        rec = tp / (tp + fn + 1e-8)
        f1 = 2 * prec * rec / (prec + rec + 1e-8)
        f1_scores.append(f1)
    macro_f1 = np.mean(f1_scores)
    return accuracy, macro_f1
```

## Common pitfalls

- The evaluation uses Leave-One-Subject-Out (LOSO) cross-validation, not random sample splitting, which drastically changes train/test distribution and requires subject-level grouping.
- Label definitions vary across datasets (e.g., WESAD binary combines neutral/amusement; CASE uses a threshold of 5 for arousal), requiring careful mapping before scoring.
- Preprocessing steps (filtering, resampling to 256 Hz, windowing) are dataset-specific and must be replicated exactly to match reported results.

## Evidence (verbatim from paper)

> For evaluating our method on different architectures (both VGG and ResNet encoder pipelines), we use accuracy and F1-score with macro-averaging. For testing our model, we use Leave-One-Subject-Out (LOSO) evaluation scheme. For tuning the hyperparameters, we use twenty percent of the training set as a validation set.

## Citation

```bibtex
@misc{bhatti2022attx,
  title={AttX: Attentive Cross-Connections for Fusion of Wearable Signals in Emotion Recognition},
  author={Bhatti et al. (2022)},
  year={2022},
  note={arXiv:2206.04625}
}
```

- arXiv: 2206.04625

