research(phase3b): benchmark 1D CNN on RAW pulses — data-starved, benched
Trains a PyTorch 1D CNN on encoded RAW pulse arrays as the Phase 3B leg of the designed ensemble, scored on the SAME group-disjoint held-out test set as the heuristic and statistical models (GroupShuffleSplit by device sub-folder, no near-duplicate leakage). RESULT — CNN is data-starved and loses decisively: CNN balanced 0.338, top-1 0.795 (garage-inflated) statistical balanced 0.625, top-1 0.868 heuristic top-1 0.300 Only 489 train samples with severe class imbalance (Garage 565, Security 2, Weather 12). A blend sweep confirmed every non-zero CNN weight degrades the statistical model (0.625 -> 0.613 at 15% CNN, worse beyond), so the CNN is NOT wired into decode(). Production ensemble stays heuristic + statistical, both already live. Committing the trainer + shared pulse_encoder (trainer/inference parity) + metrics.json to document the reproducible negative result. The benched .pt/.onnx binaries are intentionally NOT committed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"n_samples": 803,
|
||||
"n_train": 489,
|
||||
"n_val": 94,
|
||||
"n_test": 220,
|
||||
"classes": [
|
||||
"Doorbell",
|
||||
"Fan Controller",
|
||||
"Garage Door Opener",
|
||||
"Remote Control",
|
||||
"Security Sensor",
|
||||
"Weather Sensor"
|
||||
],
|
||||
"pulse_len": 512,
|
||||
"epochs": 60,
|
||||
"class_balance": {
|
||||
"Doorbell": 39,
|
||||
"Garage Door Opener": 565,
|
||||
"Weather Sensor": 12,
|
||||
"Fan Controller": 91,
|
||||
"Security Sensor": 2,
|
||||
"Remote Control": 94
|
||||
},
|
||||
"cnn": {
|
||||
"accuracy": 0.7954545454545454,
|
||||
"balanced_accuracy": 0.33796618290289177,
|
||||
"macro_f1": 0.3552945963506287
|
||||
},
|
||||
"heuristic_same_test": {
|
||||
"top1": 0.3
|
||||
},
|
||||
"statistical_same_test": {
|
||||
"top1": 0.8681818181818182,
|
||||
"balanced_accuracy": 0.6253728690437551
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user