diff --git a/4-Infrastructure/shim/pist_train.py b/4-Infrastructure/shim/pist_train.py new file mode 100644 index 00000000..c430534c --- /dev/null +++ b/4-Infrastructure/shim/pist_train.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python3 +"""Calibration harness for the PIST spectral classifier. + +Reads the validation report, extracts spectral feature vectors, +tests separability via leave-one-out nearest-centroid classification. +Does NOT produce a production model — only a measured calibration signal. +""" + +import json +import os +import sys +import argparse +from collections import defaultdict +from math import sqrt + +FEATURE_NAMES = [ + "zero_mode_proxy_count", + "rank_estimate", + "laplacian_zero_count", + "spectral_gap", + "crossing_density", + "strand_entropy", +] + +EIGEN_LEN = 8 # symmetric_eigenvalues[0:8] +SINGULAR_LEN = 8 # singular_values[0:8] + + +def extract_vector(p: dict) -> list[float]: + """Build a flat numeric vector from one prediction entry.""" + v = [] + for name in FEATURE_NAMES: + v.append(float(p.get(name, 0))) + # Eigenvalues + ev = p.get("eigenvalues", []) + for i in range(EIGEN_LEN): + v.append(float(ev[i]) if i < len(ev) else 0.0) + # Singular values (if present; zero-padded if absent) + sv = p.get("singular_values", []) + for i in range(SINGULAR_LEN): + v.append(float(sv[i]) if i < len(sv) else 0.0) + return v + + +def feature_dim() -> int: + return len(FEATURE_NAMES) + EIGEN_LEN + SINGULAR_LEN + + +def normalize(vectors: list[list[float]]) -> tuple[list[list[float]], list[float], list[float]]: + """Z-score normalize each feature dimension.""" + n = len(vectors) + if n == 0: + return vectors, [], [] + dim = len(vectors[0]) + means = [sum(v[i] for v in vectors) / n for i in range(dim)] + stds = [sqrt(sum((v[i] - means[i]) ** 2 for v in vectors) / max(n - 1, 1)) for i in range(dim)] + stds = [s if s > 1e-9 else 1.0 for s in stds] # avoid div-by-zero + normed = [[(v[i] - means[i]) / stds[i] for i in range(dim)] for v in vectors] + return normed, means, stds + + +def centroid(vectors: list[list[float]]) -> list[float]: + if not vectors: + return [] + dim = len(vectors[0]) + return [sum(v[i] for v in vectors) / len(vectors) for i in range(dim)] + + +def euclidean(a: list[float], b: list[float]) -> float: + return sqrt(sum((a[i] - b[i]) ** 2 for i in range(len(a)))) + + +def nearest_centroid_classify( + vectors: list[list[float]], labels: list[str], centroids: dict[str, list[float]] +) -> list[str]: + results = [] + for v in vectors: + best_label = None + best_dist = float("inf") + for label, c in centroids.items(): + d = euclidean(v, c) + if d < best_dist: + best_dist = d + best_label = label + results.append(best_label) + return results + + +def main(): + parser = argparse.ArgumentParser( + description="Calibration harness for PIST spectral classifier" + ) + parser.add_argument( + "--input", + default="shared-data/rrc_pist_exact_validation.json", + help="Input validation report JSON", + ) + parser.add_argument( + "--out", + default="shared-data/rrc_pist_training_report.json", + help="Output training report JSON", + ) + parser.add_argument( + "--vectors", + default="shared-data/rrc_pist_feature_vectors.jsonl", + help="Output feature vectors as JSONL", + ) + args = parser.parse_args() + + # ── Load validation report ── + input_path = os.path.join(os.path.dirname(__file__), "../..", args.input) + with open(input_path) as f: + report = json.load(f) + + predictions = report.get("predictions", []) + n = len(predictions) + if n == 0: + print("ERROR: No predictions found in input.", flush=True) + return 1 + + print(f"Loaded {n} labeled predictions", flush=True) + + # ── Build feature vectors ── + vectors = [] + labels = [] + for p in predictions: + v = extract_vector(p) + vectors.append(v) + labels.append(p["ground_truth"]) + + # Normalize + normed, means, stds = normalize(vectors) + dim = feature_dim() + + # ── Feature variance diagnostic ── + feature_var = {} + for i, name in enumerate(FEATURE_NAMES): + vals = [v[i] for v in vectors] + mean = sum(vals) / n + var = sum((x - mean) ** 2 for x in vals) / max(n - 1, 1) + uniq = len(set(vals)) + feature_var[name] = { + "mean": round(mean, 4), + "variance": round(var, 4), + "unique": uniq, + "collapsed": uniq <= 1, + } + + for band in ["eigenvalues", "singular_values"]: + for i in range(8): + idx = len(FEATURE_NAMES) + (0 if band == "eigenvalues" else 8) + i + vals = [v[idx] for v in vectors] + mean = sum(vals) / n + var = sum((x - mean) ** 2 for x in vals) / max(n - 1, 1) + uniq = len(set(round(x, 6) for x in vals)) + feature_var[f"{band}[{i}]"] = { + "mean": round(mean, 4), + "variance": round(var, 4), + "unique": uniq, + "collapsed": uniq <= 1, + } + + collapsed_dims = [k for k, v in feature_var.items() if v.get("collapsed")] + print(f" Feature dimensions: {dim}", flush=True) + print(f" Collapsed features: {len(collapsed_dims)} {collapsed_dims[:5]}", flush=True) + + # ── Unique labels ── + unique_labels = sorted(set(labels)) + print(f" Unique labels: {len(unique_labels)} {unique_labels}", flush=True) + + # ── Label balance ── + label_counts = defaultdict(int) + for lbl in labels: + label_counts[lbl] += 1 + print(f" Label distribution:", flush=True) + for lbl in sorted(label_counts.keys()): + print(f" {lbl:35s}: {label_counts[lbl]:3d}", flush=True) + + # ── Leave-one-out nearest-centroid ── + correct = 0 + confusion = defaultdict(lambda: defaultdict(int)) + class_distances = defaultdict(list) + + for i in range(n): + train_v = normed[:i] + normed[i + 1:] + train_l = labels[:i] + labels[i + 1:] + test_v = normed[i] + test_l = labels[i] + + # Build centroids per class from training set + class_vectors = defaultdict(list) + for v, lbl in zip(train_v, train_l): + class_vectors[lbl].append(v) + centroids = {lbl: centroid(vecs) for lbl, vecs in class_vectors.items()} + + # Classify test point + best_label = None + best_dist = float("inf") + for lbl, c in centroids.items(): + d = euclidean(test_v, c) + if d < best_dist: + best_dist = d + best_label = lbl + class_distances[test_l].append(best_dist) + + if best_label == test_l: + correct += 1 + confusion[test_l][best_label] += 1 + + accuracy = correct / n if n > 0 else 0 + print(f"\n Leave-one-out nearest-centroid accuracy: {correct}/{n} = {accuracy:.1%}", + flush=True) + + # Per-class accuracy + print(f"\n Per-class:", flush=True) + print(f" {'Class':35s} {'N':>5} {'Correct':>8} {'Acc':>6}", flush=True) + for lbl in sorted(unique_labels): + total = label_counts[lbl] + corr = confusion[lbl][lbl] + print(f" {lbl:35s} {total:5d} {corr:8d} {(corr/total*100 if total else 0):5.1f}%", + flush=True) + + # Confusion matrix + print(f"\n Confusion matrix (rows=truth, cols=pred):", flush=True) + header = f" {'':20s}" + "".join(f"{c[:16]:>16s}" for c in unique_labels) + print(header) + for gt in unique_labels: + row = f" {gt[:20]:20s}" + for p in unique_labels: + row += f"{confusion[gt][p]:>16d}" + print(row) + + # Nearest same-class vs different-class distance + same_dists = [] + diff_dists = [] + for i in range(n): + for j in range(n): + if i == j: + continue + d = euclidean(normed[i], normed[j]) + if labels[i] == labels[j]: + same_dists.append(d) + else: + diff_dists.append(d) + avg_same = sum(same_dists) / len(same_dists) if same_dists else 0 + avg_diff = sum(diff_dists) / len(diff_dists) if diff_dists else 0 + sep_ratio = avg_same / max(avg_diff, 1e-9) + print(f"\n Within-class mean distance: {avg_same:.4f}", flush=True) + print(f" Between-class mean distance: {avg_diff:.4f}", flush=True) + print(f" Separation ratio (same/diff): {sep_ratio:.4f}", flush=True) + + # ── Class centroids ── + centroids: dict[str, list[float]] = {} + for lbl in unique_labels: + idxs = [i for i, l in enumerate(labels) if l == lbl] + centroids[lbl] = centroid([normed[i] for i in idxs]) + + # ── Build warnings ── + warnings = [ + f"Only {n} labeled samples; classifier is calibration-only.", + "Do not promote model to production until full 278 labeled equations are available.", + ] + if collapsed_dims: + warnings.append( + f"Collapsed features ({len(collapsed_dims)}): {collapsed_dims[:5]}. " + "These dimensions carry no discriminative power." + ) + if accuracy < 0.3: + warnings.append("Accuracy below 30%. Spectral features may need richer extraction.") + elif accuracy > 0.7: + warnings.append(f"Accuracy {accuracy:.0%} is promising but overfits to {n} samples.") + + # ── Output report ── + report = { + "n_samples": n, + "dimension": dim, + "method": "leave_one_out_nearest_centroid_v1", + "accuracy": round(accuracy, 4), + "unique_labels": unique_labels, + "label_distribution": dict(label_counts), + "per_class": { + lbl: { + "n": label_counts[lbl], + "correct": confusion[lbl][lbl], + "accuracy": round(confusion[lbl][lbl] / max(label_counts[lbl], 1), 4), + } + for lbl in unique_labels + }, + "confusion_matrix": {gt: dict(preds) for gt, preds in confusion.items()}, + "feature_variance": feature_var, + "collapsed_features": collapsed_dims, + "within_class_distance": round(avg_same, 4), + "between_class_distance": round(avg_diff, 4), + "separation_ratio": round(sep_ratio, 4), + "class_centroids": {lbl: [round(v, 4) for v in c] for lbl, c in centroids.items()}, + "normalization": { + "means": [round(m, 4) for m in means], + "stds": [round(s, 4) for s in stds], + }, + "warnings": warnings, + } + + out_path = os.path.join(os.path.dirname(__file__), "../..", args.out) + os.makedirs(os.path.dirname(out_path), exist_ok=True) + with open(out_path, "w") as f: + json.dump(report, f, indent=2) + print(f"\nReport: {out_path}", flush=True) + + # ── Output feature vectors as JSONL ── + vecs_path = os.path.join(os.path.dirname(__file__), "../..", args.vectors) + os.makedirs(os.path.dirname(vecs_path), exist_ok=True) + with open(vecs_path, "w") as f: + for p, v, l in zip(predictions, normed, labels): + row = { + "equation": p["equation"], + "label": l, + "features": {name: round(v[i], 6) for i, name in enumerate(FEATURE_NAMES)}, + "eigenvalues": [round(v[len(FEATURE_NAMES) + i], 6) for i in range(EIGEN_LEN)], + "singular_values": [round(v[len(FEATURE_NAMES) + EIGEN_LEN + i], 6) for i in range(SINGULAR_LEN)], + "vector": [round(x, 6) for x in v], + } + f.write(json.dumps(row) + "\n") + print(f"Feature vectors: {vecs_path}", flush=True) + + return 0 if accuracy > 0 else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/4-Infrastructure/shim/validate_rrc_predictions.py b/4-Infrastructure/shim/validate_rrc_predictions.py index b230e021..ea7657e1 100644 --- a/4-Infrastructure/shim/validate_rrc_predictions.py +++ b/4-Infrastructure/shim/validate_rrc_predictions.py @@ -15,6 +15,15 @@ import sys import tempfile from collections import Counter, defaultdict +def require_path(obj, *path): + cur = obj + for key in path: + if key not in cur: + raise KeyError(f"Missing path: {'.'.join(path)} in result") + cur = cur[key] + return cur + + PIST_DECOMPOSE = os.environ.get( "PIST_DECOMPOSE_BIN", "/home/allaun/.local/share/opencode/worktree/" @@ -103,22 +112,25 @@ def main(): errors.append(result) continue - mhash = result["braid"]["matrix_hash"][:16] - chash = result["canonical_hash"][:16] + mhash = require_path(result, "braid", "matrix_hash")[:16] + chash = require_path(result, "canonical_hash")[:16] + proxy_label = require_path(result, "rrc_shape", "proxy", "label") + exact_label = require_path(result, "rrc_shape", "exact", "label") + zmp = require_path(result, "spectral", "zero_mode_proxy_count") + sym_ev = require_path(result, "spectral", "symmetric_eigenvalues") or [0.0] * 8 + sv_raw = result.get("spectral", {}).get("singular_values") + if sv_raw is None: + singular_v = [0.0] * 8 + else: + singular_v = [float(v) if v is not None else 0.0 for v in sv_raw] + lap_zero = require_path(result, "spectral", "laplacian_zero_count") + rank = require_path(result, "spectral", "rank_estimate") + cd = require_path(result, "braid", "crossing_density") + sent = require_path(result, "braid", "strand_entropy") + gap = require_path(result, "spectral", "symmetric_spectral_gap") matrix_hashes[mhash] += 1 canonical_hashes[chash] += 1 - proxy_label = result["rrc_shape"]["proxy"]["label"] - exact_label = result["rrc_shape"]["exact"]["label"] - zmp = result["spectral"]["zero_mode_proxy_count"] - sym_ev = result["spectral"]["symmetric_eigenvalues"] - lap_zero = result["spectral"]["laplacian_zero_count"] - rank = result["spectral"]["rank_estimate"] - cd = result["braid"]["crossing_density"] - sent = result["braid"]["strand_entropy"] - gap = result["spectral"].get("symmetric_spectral_gap", 0) - mhash = result["braid"]["matrix_hash"][:16] - print(f"{proxy_label:35s} | exact={exact_label:30s} | ZMP={zmp} | hash={mhash} | " f"rank={rank} | lap_zero={lap_zero} | gap={gap:.3f}", flush=True) @@ -130,6 +142,7 @@ def main(): "exact_pred": exact_label, "zmp": zmp, "eigenvalues": [round(v, 4) for v in sym_ev], + "singular_values": [round(v, 4) for v in singular_v], "laplacian_zero_count": lap_zero, "rank_estimate": rank, "crossing_density": cd, diff --git a/shared-data/rrc_pist_exact_validation.json b/shared-data/rrc_pist_exact_validation.json index ae61ce8e..5cd6398c 100644 --- a/shared-data/rrc_pist_exact_validation.json +++ b/shared-data/rrc_pist_exact_validation.json @@ -54,6 +54,16 @@ -0.25, -0.5 ], + "singular_values": [ + 0.6036, + 0.5, + 0.5, + 0.25, + 0.25, + 0.25, + 0.25, + 0.1036 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.16071428571428573, @@ -78,6 +88,16 @@ -0.3559, -0.4615 ], + "singular_values": [ + 0.6016, + 0.5187, + 0.4615, + 0.3559, + 0.25, + 0.25, + 0.1689, + 0.0282 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.16071428571428573, @@ -102,6 +122,16 @@ -0.3426, -0.4681 ], + "singular_values": [ + 0.6114, + 0.4681, + 0.3426, + 0.1992, + 0.0, + 0.0, + 0.0, + 0.0 + ], "laplacian_zero_count": 3, "rank_estimate": 4, "crossing_density": 0.10714285714285714, @@ -126,6 +156,16 @@ -0.4563, -0.5328 ], + "singular_values": [ + 0.7337, + 0.5328, + 0.4563, + 0.3736, + 0.25, + 0.25, + 0.25, + 0.1319 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.19642857142857142, @@ -150,6 +190,16 @@ -0.4785, -0.6208 ], + "singular_values": [ + 0.8921, + 0.6208, + 0.4785, + 0.319, + 0.283, + 0.1575, + 0.0708, + 0.0572 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.23214285714285715, @@ -174,6 +224,16 @@ -0.4539, -0.5992 ], + "singular_values": [ + 1.104, + 0.5992, + 0.4539, + 0.2928, + 0.2821, + 0.1783, + 0.138, + 0.0 + ], "laplacian_zero_count": 1, "rank_estimate": 7, "crossing_density": 0.2857142857142857, @@ -198,6 +258,16 @@ -0.3787, -0.627 ], + "singular_values": [ + 0.627, + 0.627, + 0.3787, + 0.3787, + 0.1612, + 0.1612, + 0.0, + 0.0 + ], "laplacian_zero_count": 1, "rank_estimate": 6, "crossing_density": 0.16071428571428573, @@ -222,6 +292,16 @@ -0.4274, -0.6007 ], + "singular_values": [ + 0.8634, + 0.6007, + 0.4274, + 0.325, + 0.2155, + 0.18, + 0.1591, + 0.0343 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.21428571428571427, @@ -246,6 +326,16 @@ -0.25, -0.4918 ], + "singular_values": [ + 0.5743, + 0.4918, + 0.3733, + 0.25, + 0.25, + 0.16, + 0.1158, + 0.0 + ], "laplacian_zero_count": 2, "rank_estimate": 7, "crossing_density": 0.125, @@ -270,6 +360,16 @@ -0.3886, -0.478 ], + "singular_values": [ + 0.747, + 0.478, + 0.0, + 0.3918, + 0.3886, + 0.3167, + 0.1921, + 0.1476 + ], "laplacian_zero_count": 1, "rank_estimate": 7, "crossing_density": 0.17857142857142858, @@ -294,6 +394,16 @@ -0.3519, -0.7616 ], + "singular_values": [ + 0.861, + 0.7616, + 0.3519, + 0.3186, + 0.2008, + 0.1688, + 0.098, + 0.0 + ], "laplacian_zero_count": 1, "rank_estimate": 7, "crossing_density": 0.23214285714285715, @@ -318,6 +428,16 @@ -0.4045, -0.5375 ], + "singular_values": [ + 0.5731, + 0.5375, + 0.4045, + 0.332, + 0.2277, + 0.1713, + 0.1545, + 0.0612 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.14285714285714285, @@ -342,6 +462,16 @@ -0.3378, -0.7508 ], + "singular_values": [ + 1.0067, + 0.7508, + 0.3378, + 0.25, + 0.25, + 0.1919, + 0.1445, + 0.0345 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.26785714285714285, @@ -366,6 +496,16 @@ -0.3382, -0.5451 ], + "singular_values": [ + 0.8253, + 0.5451, + 0.3382, + 0.3081, + 0.25, + 0.0, + 0.0, + 0.0 + ], "laplacian_zero_count": 2, "rank_estimate": 5, "crossing_density": 0.17857142857142858, @@ -390,6 +530,16 @@ -0.4188, -0.5 ], + "singular_values": [ + 0.5536, + 0.5, + 0.4188, + 0.25, + 0.25, + 0.1348, + 0.0, + 0.0 + ], "laplacian_zero_count": 2, "rank_estimate": 6, "crossing_density": 0.125, @@ -414,6 +564,16 @@ -0.3397, -0.4871 ], + "singular_values": [ + 0.7484, + 0.4871, + 0.3397, + 0.3156, + 0.25, + 0.1645, + 0.1519, + 0.0 + ], "laplacian_zero_count": 2, "rank_estimate": 7, "crossing_density": 0.16071428571428573, @@ -438,6 +598,16 @@ -0.4471, -0.5733 ], + "singular_values": [ + 0.816, + 0.5733, + 0.4471, + 0.2769, + 0.2297, + 0.1948, + 0.0977, + 0.0603 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.19642857142857142, @@ -462,6 +632,16 @@ -0.25, -0.5339 ], + "singular_values": [ + 0.5339, + 0.5339, + 0.5, + 0.25, + 0.25, + 0.1655, + 0.1655, + 0.0 + ], "laplacian_zero_count": 2, "rank_estimate": 7, "crossing_density": 0.14285714285714285, @@ -486,6 +666,16 @@ -0.4517, -0.5 ], + "singular_values": [ + 0.6451, + 0.5, + 0.4517, + 0.3786, + 0.2692, + 0.1972, + 0.0, + 0.0 + ], "laplacian_zero_count": 1, "rank_estimate": 6, "crossing_density": 0.16071428571428573, @@ -510,6 +700,16 @@ -0.25, -0.6311 ], + "singular_values": [ + 0.6311, + 0.6311, + 0.25, + 0.25, + 0.1981, + 0.1981, + 0.0, + 0.0 + ], "laplacian_zero_count": 2, "rank_estimate": 6, "crossing_density": 0.14285714285714285, @@ -534,6 +734,16 @@ -0.3471, -0.5305 ], + "singular_values": [ + 0.6486, + 0.5305, + 0.3471, + 0.229, + 0.0, + 0.0, + 0.0, + 0.0 + ], "laplacian_zero_count": 2, "rank_estimate": 4, "crossing_density": 0.125, @@ -558,6 +768,16 @@ -0.3634, -0.5713 ], + "singular_values": [ + 0.5713, + 0.5713, + 0.3634, + 0.3634, + 0.172, + 0.172, + 0.1094, + 0.1094 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.14285714285714285, @@ -582,6 +802,16 @@ -0.4487, -0.5382 ], + "singular_values": [ + 0.8268, + 0.5382, + 0.4487, + 0.3888, + 0.2703, + 0.25, + 0.1865, + 0.0624 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.21428571428571427, @@ -606,6 +836,16 @@ -0.4398, -0.5617 ], + "singular_values": [ + 0.9383, + 0.5617, + 0.4398, + 0.3086, + 0.283, + 0.2005, + 0.1387, + 0.0271 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.23214285714285715, @@ -630,6 +870,16 @@ -0.45, -0.6437 ], + "singular_values": [ + 0.9877, + 0.6437, + 0.45, + 0.3993, + 0.25, + 0.1822, + 0.1442, + 0.0813 + ], "laplacian_zero_count": 1, "rank_estimate": 8, "crossing_density": 0.26785714285714285, @@ -654,6 +904,16 @@ -0.3643, -0.5898 ], + "singular_values": [ + 0.7388, + 0.5898, + 0.3643, + 0.3297, + 0.2331, + 0.1858, + 0.1616, + 0.0 + ], "laplacian_zero_count": 1, "rank_estimate": 7, "crossing_density": 0.17857142857142858, diff --git a/shared-data/rrc_pist_feature_vectors.jsonl b/shared-data/rrc_pist_feature_vectors.jsonl new file mode 100644 index 00000000..d4bc7906 --- /dev/null +++ b/shared-data/rrc_pist_feature_vectors.jsonl @@ -0,0 +1,26 @@ +{"equation": "Equation", "label": "RRC shape", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": -1.49541, "crossing_density": -0.437076, "strand_entropy": 0.581816}, "eigenvalues": [-0.861383, 1.957796, 1.108202, -2.09609, -1.674705, -0.412367, 1.786534, 0.810478], "singular_values": [-0.861383, -0.86341, 1.102175, -1.061587, 0.284742, 1.039763, 1.745079, 1.465319], "vector": [0.0, 0.811107, -0.616381, -1.49541, -0.437076, 0.581816, -0.861383, 1.957796, 1.108202, -2.09609, -1.674705, -0.412367, 1.786534, 0.810478, -0.861383, -0.86341, 1.102175, -1.061587, 0.284742, 1.039763, 1.745079, 1.465319]} +{"equation": "---", "label": "---", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": -1.599452, "crossing_density": -0.437076, "strand_entropy": 0.604336}, "eigenvalues": [-0.873929, 2.186306, -0.031623, 0.222988, -1.674705, -0.412367, 0.289063, 1.306527], "singular_values": [-0.873929, -0.61541, 0.7184, 0.783026, 0.284742, 1.039763, 0.723742, -0.17187], "vector": [0.0, 0.811107, -0.616381, -1.599452, -0.437076, 0.604336, -0.873929, 2.186306, -0.031623, 0.222988, -1.674705, -0.412367, 0.289063, 1.306527, -0.873929, -0.61541, 0.7184, 0.783026, 0.284742, 1.039763, 0.723742, -0.17187]} +{"equation": "bandwidth_adjusted_threshold", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": -2.433321, "laplacian_zero_count": 2.944929, "spectral_gap": 0.055675, "crossing_density": -1.536816, "strand_entropy": -3.14349}, "eigenvalues": [-0.812453, -1.717912, -2.405438, -0.273203, 1.321766, 2.793455, 0.477131, 1.22149], "singular_values": [-0.812453, -1.28647, -0.466818, -1.946443, -2.875272, -2.307832, -1.403309, -0.784187], "vector": [0.0, -2.433321, 2.944929, 0.055675, -1.536816, -3.14349, -0.812453, -1.717912, -2.405438, -0.273203, 1.321766, 2.793455, 0.477131, 1.22149, -0.812453, -1.28647, -0.466818, -1.946443, -2.875272, -2.307832, -1.403309, -0.784187]} +{"equation": "bandwidth_overflow", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": -0.20619, "crossing_density": 0.296084, "strand_entropy": 0.605085}, "eigenvalues": [-0.045262, 0.413216, 1.108202, 2.047635, -1.674705, -0.412367, -1.130636, 0.38787], "singular_values": [-0.045262, -0.428415, 0.666565, 1.091332, 0.284742, 1.039763, 1.745079, 2.079808], "vector": [0.0, 0.811107, -0.616381, -0.20619, 0.296084, 0.605085, -0.045262, 0.413216, 1.108202, 2.047635, -1.674705, -0.412367, -1.130636, 0.38787, -0.045262, -0.428415, 0.666565, 1.091332, 0.284742, 1.039763, 1.745079, 2.079808]} +{"equation": "effective_cognitive_load", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": 0.863887, "crossing_density": 1.029244, "strand_entropy": 0.605085}, "eigenvalues": [0.948385, -0.253983, -0.191845, 0.972554, 0.636174, -0.835536, -1.444553, -0.745957], "singular_values": [0.948385, 0.738645, 0.887859, 0.140285, 0.701863, -0.198847, -0.511686, 0.457818], "vector": [0.0, 0.811107, -0.616381, 0.863887, 1.029244, 0.605085, 0.948385, -0.253983, -0.191845, 0.972554, 0.636174, -0.835536, -1.444553, -0.745957, 0.948385, 0.738645, 0.887859, 0.140285, 0.701863, -0.198847, -0.511686, 0.457818]} +{"equation": "emotional_gate", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.0, "laplacian_zero_count": -0.616381, "spectral_gap": 2.114405, "crossing_density": 2.128983, "strand_entropy": 0.605085}, "eigenvalues": [2.277638, -0.704893, -0.465909, -0.273203, -0.815317, -0.961204, -1.096699, -0.467654], "singular_values": [2.277638, 0.452185, 0.642642, -0.316078, 0.690487, 0.079673, 0.334601, -0.784187], "vector": [0.0, 0.0, -0.616381, 2.114405, 2.128983, 0.605085, 2.277638, -0.704893, -0.465909, -0.273203, -0.815317, -0.961204, -1.096699, -0.467654, 2.277638, 0.452185, 0.642642, -0.316078, 0.690487, 0.079673, 0.334601, -0.784187]} +{"equation": "emotional_load", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": -0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": -0.768119, "crossing_density": -0.437076, "strand_entropy": 0.605054}, "eigenvalues": [-0.714594, 0.475537, -0.139843, -0.273203, 1.321766, 0.726341, -0.033339, -0.82584], "singular_values": [-0.714594, 0.82087, -0.106966, 1.180166, -0.837695, -0.149303, -1.403309, -0.784187], "vector": [0.0, -0.811107, -0.616381, -0.768119, -0.437076, 0.605054, -0.714594, 0.475537, -0.139843, -0.273203, 1.321766, 0.726341, -0.033339, -0.82584, -0.714594, 0.82087, -0.106966, 1.180166, -0.837695, -0.149303, -1.403309, -0.784187]} +{"equation": "emotional_offload", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": 0.689981, "crossing_density": 0.662664, "strand_entropy": 0.605085}, "eigenvalues": [0.768349, -0.180665, 0.124383, 0.33032, -0.585188, 0.030036, -0.721977, -0.486981], "singular_values": [0.768349, 0.472078, 0.378485, 0.244796, -0.15134, 0.102436, 0.600325, -0.039418], "vector": [0.0, 0.811107, -0.616381, 0.689981, 0.662664, 0.605085, 0.768349, -0.180665, 0.124383, 0.33032, -0.585188, 0.030036, -0.721977, -0.486981, 0.768349, 0.472078, 0.378485, 0.244796, -0.15134, 0.102436, 0.600325, -0.039418]} +{"equation": "historical_emotional_barrier", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.0, "laplacian_zero_count": 1.164274, "spectral_gap": -1.006361, "crossing_density": -1.170236, "strand_entropy": -1.135121}, "eigenvalues": [-1.045182, 0.40955, -0.156708, -0.273203, -0.066199, -0.412367, 1.786534, 0.91613], "singular_values": [-1.045182, -0.972159, -0.160795, -1.061587, 0.284742, -0.165371, 0.055024, -0.784187], "vector": [0.0, 0.0, 1.164274, -1.006361, -1.170236, -1.135121, -1.045182, 0.40955, -0.156708, -0.273203, -0.066199, -0.412367, 1.786534, 0.91613, -1.045182, -0.972159, -0.160795, -1.061587, 0.284742, -0.165371, 0.055024, -0.784187]} +{"equation": "historical_emotional_temperature", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.0, "laplacian_zero_count": -0.616381, "spectral_gap": -0.230316, "crossing_density": -0.070496, "strand_entropy": 0.605053}, "eigenvalues": [0.038169, 0.635616, 0.294443, -0.273203, -0.44735, -1.267681, -0.173329, 1.093935], "singular_values": [0.038169, -1.155175, -3.881921, 1.408348, 2.036653, 1.932901, 1.015912, 2.420708], "vector": [0.0, 0.0, -0.616381, -0.230316, -0.070496, 0.605053, 0.038169, 0.635616, 0.294443, -0.273203, -0.44735, -1.267681, -0.173329, 1.093935, 0.038169, -1.155175, -3.881921, 1.408348, 2.036653, 1.932901, 1.015912, 2.420708]} +{"equation": "historical_offload_efficiency", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.0, "laplacian_zero_count": -0.616381, "spectral_gap": 0.710086, "crossing_density": 1.029244, "strand_entropy": 0.605085}, "eigenvalues": [0.753294, -0.258871, 0.416718, -0.273203, 0.14715, 0.628884, 0.345625, -2.56008], "singular_values": [0.753294, 2.605941, -0.374114, 0.133318, -0.337149, -0.047536, -0.169141, -0.784187], "vector": [0.0, 0.0, -0.616381, 0.710086, 1.029244, 0.605085, 0.753294, -0.258871, 0.416718, -0.273203, 0.14715, 0.628884, 0.345625, -2.56008, 0.753294, 2.605941, -0.374114, 0.133318, -0.337149, -0.047536, -0.169141, -0.784187]} +{"equation": "overflow_gate", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": -0.80481, "crossing_density": -0.803656, "strand_entropy": 0.605082}, "eigenvalues": [-1.05271, -0.095126, 0.002108, 2.445292, 0.58823, -0.126408, -0.398162, 0.327313], "singular_values": [-1.05271, -0.366083, 0.150213, 0.366725, 0.002868, -0.01406, 0.542395, 0.544672], "vector": [0.0, 0.811107, -0.616381, -0.80481, -0.803656, 0.605082, -1.05271, -0.095126, 0.002108, 2.445292, 0.58823, -0.126408, -0.398162, 0.327313, -1.05271, -0.366083, 0.150213, 0.366725, 0.002868, -0.01406, 0.542395, 0.544672]} +{"equation": "raw_cognitive_load", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": 1.7872, "crossing_density": 1.762403, "strand_entropy": 0.605085}, "eigenvalues": [1.667273, -1.097148, 0.291632, 0.33384, -0.410194, -0.412367, 0.545005, -2.420929], "singular_values": [1.667273, 2.462711, -0.514665, -1.061587, 0.284742, 0.261782, 0.416459, -0.035075], "vector": [0.0, 0.811107, -0.616381, 1.7872, 1.762403, 0.605085, 1.667273, -1.097148, 0.291632, 0.33384, -0.410194, -0.412367, 0.545005, -2.420929, 1.667273, 2.462711, -0.514665, -1.061587, 0.284742, 0.261782, 0.416459, -0.035075]} +{"equation": "residual_stress", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": -1.622214, "laplacian_zero_count": 1.164274, "spectral_gap": 0.583425, "crossing_density": -0.070496, "strand_entropy": -1.134869}, "eigenvalues": [0.529347, -0.387179, -2.405438, -0.273203, 1.321766, -0.412367, 0.539348, 0.229392], "singular_values": [0.529347, -0.265292, -0.510678, -0.049576, 0.284742, -2.307832, -1.403309, -0.784187], "vector": [0.0, -1.622214, 1.164274, 0.583425, -0.070496, -1.134869, 0.529347, -0.387179, -2.405438, -0.273203, 1.321766, -0.412367, 0.539348, 0.229392, 0.529347, -0.265292, -0.510678, -0.049576, 0.284742, -2.307832, -1.403309, -0.784187]} +{"equation": "threshold", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": -0.811107, "laplacian_zero_count": 1.164274, "spectral_gap": -0.49017, "crossing_density": -1.170236, "strand_entropy": -1.134865}, "eigenvalues": [-1.175034, -1.097148, 1.108202, -0.273203, 1.321766, 1.064876, -0.60037, 0.810478], "singular_values": [-1.175034, -0.86341, 0.292758, -1.061587, 0.284742, -0.502809, -1.403309, -0.784187], "vector": [0.0, -0.811107, 1.164274, -0.49017, -1.170236, -1.134865, -1.175034, -1.097148, 1.108202, -0.273203, 1.321766, 1.064876, -0.60037, 0.810478, -1.175034, -0.86341, 0.292758, -1.061587, 0.284742, -0.502809, -1.403309, -0.784187]} +{"equation": "total_protective_load", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.0, "laplacian_zero_count": 1.164274, "spectral_gap": 0.159214, "crossing_density": -0.437076, "strand_entropy": -1.134865}, "eigenvalues": [0.046951, -0.295531, -0.093463, -0.273203, -0.498889, -0.412367, 0.518138, 0.976687], "singular_values": [0.046951, -1.034491, -0.495726, 0.081063, 0.284742, -0.105114, 0.509651, -0.784187], "vector": [0.0, 0.0, 1.164274, 0.159214, -0.437076, -1.134865, 0.046951, -0.295531, -0.093463, -0.273203, -0.498889, -0.412367, 0.518138, 0.976687, 0.046951, -1.034491, -0.495726, 0.081063, 0.284742, -0.105114, 0.509651, -0.784187]} +{"equation": "trauma_adjusted_emotional_barrier", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": 0.693499, "crossing_density": 0.296084, "strand_entropy": 0.605085}, "eigenvalues": [0.471007, -0.768436, 0.33239, 0.787802, 0.150746, -0.152055, -1.000544, -0.133948], "singular_values": [0.471007, 0.108698, 0.574858, -0.593031, 0.028148, 0.300614, -0.172919, 0.52513], "vector": [0.0, 0.811107, -0.616381, 0.693499, 0.296084, 0.605085, 0.471007, -0.768436, 0.33239, 0.787802, 0.150746, -0.152055, -1.000544, -0.133948, 0.471007, 0.108698, 0.574858, -0.593031, 0.028148, 0.300614, -0.172919, 0.52513]} +{"equation": "trauma_adjusted_emotional_temperature", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.0, "laplacian_zero_count": 1.164274, "spectral_gap": -1.845735, "crossing_density": -0.803656, "strand_entropy": -0.911985}, "eigenvalues": [-1.298612, 1.957796, -0.079408, -0.273203, -0.661897, -0.412367, 1.786534, 0.373697], "singular_values": [-1.298612, -0.413827, 1.102175, -1.061587, 0.284742, -0.091724, 0.680924, -0.784187], "vector": [0.0, 0.0, 1.164274, -1.845735, -0.803656, -0.911985, -1.298612, 1.957796, -0.079408, -0.273203, -0.661897, -0.412367, 1.786534, 0.373697, -1.298612, -0.413827, 1.102175, -1.061587, 0.284742, -0.091724, 0.680924, -0.784187]} +{"equation": "trauma_adjusted_offload_efficiency", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": -0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": -0.676139, "crossing_density": -0.437076, "strand_entropy": 0.605078}, "eigenvalues": [-0.601052, 0.474315, 0.366121, -0.273203, 1.321766, -0.658575, -1.06559, 0.810478], "singular_values": [-0.601052, -0.86341, 0.620712, 1.178424, 0.527431, 0.332751, -1.403309, -0.784187], "vector": [0.0, -0.811107, -0.616381, -0.676139, -0.437076, 0.605078, -0.601052, 0.474315, 0.366121, -0.273203, 1.321766, -0.658575, -1.06559, 0.810478, -0.601052, -0.86341, 0.620712, 1.178424, 0.527431, 0.332751, -1.403309, -0.784187]} +{"equation": "trauma_adjusted_threshold", "label": "CognitiveLoadField", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": -0.811107, "laplacian_zero_count": 1.164274, "spectral_gap": -0.10064, "crossing_density": -0.803656, "strand_entropy": -1.134865}, "eigenvalues": [-0.688874, -1.097148, 0.37877, -0.273203, 1.321766, 0.253161, 1.786534, -0.878666], "singular_values": [-0.688874, 0.875244, -1.389873, -1.061587, -0.371277, 0.344802, -1.403309, -0.784187], "vector": [0.0, -0.811107, 1.164274, -0.10064, -0.803656, -1.134865, -0.688874, -1.097148, 0.37877, -0.273203, 1.321766, 0.253161, 1.786534, -0.878666, -0.688874, 0.875244, -1.389873, -1.061587, -0.371277, 0.344802, -1.403309, -0.784187]} +{"equation": "core_equations", "label": "SignalShapedRouteCompiler", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": -2.433321, "laplacian_zero_count": 1.164274, "spectral_gap": 0.092869, "crossing_density": -1.170236, "strand_entropy": -1.134865}, "eigenvalues": [-0.579096, -1.353763, -2.405438, -0.273203, 1.321766, 2.793455, 0.413499, 0.417504], "singular_values": [-0.579096, -0.458918, -0.421961, -1.427374, -2.875272, -2.307832, -1.403309, -0.784187], "vector": [0.0, -2.433321, 1.164274, 0.092869, -1.170236, -1.134865, -0.579096, -1.353763, -2.405438, -0.273203, 1.321766, 2.793455, 0.413499, 0.417504, -0.579096, -0.458918, -0.421961, -1.427374, -2.875272, -2.307832, -1.403309, -0.784187]} +{"equation": "field_mapping", "label": "SignalShapedRouteCompiler", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": -0.970675, "crossing_density": -0.803656, "strand_entropy": 0.60257}, "eigenvalues": [-1.064001, 0.288575, 0.011946, 1.651738, 0.010511, 0.587849, 0.18301, -0.108179], "singular_values": [-1.064001, 0.082174, -0.25948, 0.913664, -0.701183, -0.004687, -0.025575, 1.591257], "vector": [0.0, 0.811107, -0.616381, -0.970675, -0.803656, 0.60257, -1.064001, 0.288575, 0.011946, 1.651738, 0.010511, 0.587849, 0.18301, -0.108179, -1.064001, 0.082174, -0.25948, 0.913664, -0.701183, -0.004687, -0.025575, 1.591257]} +{"equation": "source_domain", "label": "SignalShapedRouteCompiler", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": 0.185351, "crossing_density": 0.662664, "strand_entropy": 0.605085}, "eigenvalues": [0.538756, 0.598957, 1.39351, -1.371158, -0.913601, -0.412367, -1.023169, 0.318294], "singular_values": [0.538756, -0.3568, 0.590807, 1.356092, 0.541335, 1.039763, 0.945388, 0.570728], "vector": [0.0, 0.811107, -0.616381, 0.185351, 0.662664, 0.605085, 0.538756, 0.598957, 1.39351, -1.371158, -0.913601, -0.412367, -1.023169, 0.318294, 0.538756, -0.3568, 0.590807, 1.356092, 0.541335, 1.039763, 0.945388, 0.570728]} +{"equation": "target_domain", "label": "SignalShapedRouteCompiler", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": 1.277543, "crossing_density": 1.029244, "strand_entropy": 0.605085}, "eigenvalues": [1.238198, -0.693895, 0.412501, 0.203633, -0.340676, -1.163812, -0.897319, 0.015511], "singular_values": [1.238198, -0.045142, 0.50209, -0.040866, 0.701863, 0.376939, 0.343417, -0.195754], "vector": [0.0, 0.811107, -0.616381, 1.277543, 1.029244, 0.605085, 1.238198, -0.693895, 0.412501, 0.203633, -0.340676, -1.163812, -0.897319, 0.015511, 1.238198, -0.045142, 0.50209, -0.040866, 0.701863, 0.376939, 0.343417, -0.195754]} +{"equation": "heat_loss", "label": "SignalShapedRouteCompiler", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.811107, "laplacian_zero_count": -0.616381, "spectral_gap": 0.940788, "crossing_density": 1.762403, "strand_entropy": 0.605085}, "eigenvalues": [1.548085, 0.727265, 0.155303, -1.703712, -0.406598, -0.412367, -1.041551, -1.04101], "singular_values": [1.548085, 1.042346, 0.603766, 1.538986, 0.284742, 0.131895, 0.412681, 0.981111], "vector": [0.0, 0.811107, -0.616381, 0.940788, 1.762403, 0.605085, 1.548085, 0.727265, 0.155303, -1.703712, -0.406598, -0.412367, -1.041551, -1.04101, 1.548085, 1.042346, 0.603766, 1.538986, 0.284742, 0.131895, 0.412681, 0.981111]} +{"equation": "magnetic_projection", "label": "SignalShapedRouteCompiler", "features": {"zero_mode_proxy_count": 0.0, "rank_estimate": 0.0, "laplacian_zero_count": -0.616381, "spectral_gap": 0.040094, "crossing_density": -0.070496, "strand_entropy": 0.605085}, "eigenvalues": [-0.01327, -0.123232, 0.87068, -0.273203, -0.615152, 0.410888, 0.170283, -0.346541], "singular_values": [-0.01327, 0.327522, -0.250508, 0.326663, 0.071125, 0.180101, 0.631809, -0.784187], "vector": [0.0, 0.0, -0.616381, 0.040094, -0.070496, 0.605085, -0.01327, -0.123232, 0.87068, -0.273203, -0.615152, 0.410888, 0.170283, -0.346541, -0.01327, 0.327522, -0.250508, 0.326663, 0.071125, 0.180101, 0.631809, -0.784187]} diff --git a/shared-data/rrc_pist_training_report.json b/shared-data/rrc_pist_training_report.json new file mode 100644 index 00000000..397ced1b --- /dev/null +++ b/shared-data/rrc_pist_training_report.json @@ -0,0 +1,359 @@ +{ + "n_samples": 26, + "dimension": 22, + "method": "leave_one_out_nearest_centroid_v1", + "accuracy": 0.3846, + "unique_labels": [ + "---", + "CognitiveLoadField", + "RRC shape", + "SignalShapedRouteCompiler" + ], + "label_distribution": { + "RRC shape": 1, + "---": 1, + "CognitiveLoadField": 18, + "SignalShapedRouteCompiler": 6 + }, + "per_class": { + "---": { + "n": 1, + "correct": 0, + "accuracy": 0.0 + }, + "CognitiveLoadField": { + "n": 18, + "correct": 8, + "accuracy": 0.4444 + }, + "RRC shape": { + "n": 1, + "correct": 0, + "accuracy": 0.0 + }, + "SignalShapedRouteCompiler": { + "n": 6, + "correct": 2, + "accuracy": 0.3333 + } + }, + "confusion_matrix": { + "RRC shape": { + "---": 1, + "RRC shape": 0, + "CognitiveLoadField": 0, + "SignalShapedRouteCompiler": 0 + }, + "---": { + "RRC shape": 1, + "---": 0, + "CognitiveLoadField": 0, + "SignalShapedRouteCompiler": 0 + }, + "CognitiveLoadField": { + "CognitiveLoadField": 8, + "SignalShapedRouteCompiler": 9, + "---": 1, + "RRC shape": 0 + }, + "SignalShapedRouteCompiler": { + "CognitiveLoadField": 4, + "SignalShapedRouteCompiler": 2, + "---": 0, + "RRC shape": 0 + } + }, + "feature_variance": { + "zero_mode_proxy_count": { + "mean": 0.0, + "variance": 0.0, + "unique": 1, + "collapsed": true + }, + "rank_estimate": { + "mean": 7.0, + "variance": 1.52, + "unique": 5, + "collapsed": false + }, + "laplacian_zero_count": { + "mean": 1.3462, + "variance": 0.3154, + "unique": 3, + "collapsed": false + }, + "spectral_gap": { + "mean": 0.4011, + "variance": 0.0396, + "unique": 26, + "collapsed": false + }, + "crossing_density": { + "mean": 0.182, + "variance": 0.0024, + "unique": 10, + "collapsed": false + }, + "strand_entropy": { + "mean": 2.933, + "variance": 0.0123, + "unique": 26, + "collapsed": false + }, + "eigenvalues[0]": { + "mean": 0.7409, + "variance": 0.0254, + "unique": 26, + "collapsed": false + }, + "eigenvalues[1]": { + "mean": 0.3398, + "variance": 0.0067, + "unique": 23, + "collapsed": false + }, + "eigenvalues[2]": { + "mean": 0.1712, + "variance": 0.0051, + "unique": 22, + "collapsed": false + }, + "eigenvalues[3]": { + "mean": 0.0155, + "variance": 0.0032, + "unique": 13, + "collapsed": false + }, + "eigenvalues[4]": { + "mean": -0.1103, + "variance": 0.007, + "unique": 18, + "collapsed": false + }, + "eigenvalues[5]": { + "mean": -0.2178, + "variance": 0.0061, + "unique": 16, + "collapsed": false + }, + "eigenvalues[6]": { + "mean": -0.3763, + "variance": 0.005, + "unique": 23, + "collapsed": false + }, + "eigenvalues[7]": { + "mean": -0.5629, + "variance": 0.006, + "unique": 24, + "collapsed": false + }, + "singular_values[0]": { + "mean": 0.7409, + "variance": 0.0254, + "unique": 26, + "collapsed": false + }, + "singular_values[1]": { + "mean": 0.5651, + "variance": 0.0057, + "unique": 24, + "collapsed": false + }, + "singular_values[2]": { + "mean": 0.3894, + "variance": 0.0101, + "unique": 25, + "collapsed": false + }, + "singular_values[3]": { + "mean": 0.3109, + "variance": 0.0033, + "unique": 21, + "collapsed": false + }, + "singular_values[4]": { + "mean": 0.2275, + "variance": 0.0063, + "unique": 15, + "collapsed": false + }, + "singular_values[5]": { + "mean": 0.1723, + "variance": 0.0056, + "unique": 21, + "collapsed": false + }, + "singular_values[6]": { + "mean": 0.1114, + "variance": 0.0063, + "unique": 19, + "collapsed": false + }, + "singular_values[7]": { + "mean": 0.0361, + "variance": 0.0021, + "unique": 14, + "collapsed": false + } + }, + "collapsed_features": [ + "zero_mode_proxy_count" + ], + "within_class_distance": 6.1938, + "between_class_distance": 6.1482, + "separation_ratio": 1.0074, + "class_centroids": { + "---": [ + 0.0, + 0.8111, + -0.6164, + -1.5995, + -0.4371, + 0.6043, + -0.8739, + 2.1863, + -0.0316, + 0.223, + -1.6747, + -0.4124, + 0.2891, + 1.3065, + -0.8739, + -0.6154, + 0.7184, + 0.783, + 0.2847, + 1.0398, + 0.7237, + -0.1719 + ], + "CognitiveLoadField": [ + 0.0, + -0.1352, + 0.175, + 0.0849, + -0.0298, + -0.1708, + 0.0037, + -0.1993, + -0.0842, + 0.2022, + 0.2385, + -0.0544, + 0.0066, + -0.0763, + 0.0037, + 0.0493, + -0.1436, + -0.1327, + 0.0782, + -0.0831, + -0.1874, + -0.1485 + ], + "RRC shape": [ + 0.0, + 0.8111, + -0.6164, + -1.4954, + -0.4371, + 0.5818, + -0.8614, + 1.9578, + 1.1082, + -2.0961, + -1.6747, + -0.4124, + 1.7865, + 0.8105, + -0.8614, + -0.8634, + 1.1022, + -1.0616, + 0.2847, + 1.0398, + 1.7451, + 1.4653 + ], + "SignalShapedRouteCompiler": [ + 0.0, + 0.1352, + -0.3196, + 0.261, + 0.235, + 0.3147, + 0.2781, + -0.0927, + 0.0731, + -0.2943, + -0.1573, + 0.3006, + -0.3659, + -0.1241, + 0.2781, + 0.0985, + 0.1275, + 0.4445, + -0.3296, + -0.0973, + 0.1507, + 0.2298 + ] + }, + "normalization": { + "means": [ + 0.0, + 7.0, + 1.3462, + 0.4011, + 0.182, + 2.933, + 0.7409, + 0.3398, + 0.1712, + 0.0155, + -0.1103, + -0.2178, + -0.3763, + -0.5629, + 0.7409, + 0.5651, + 0.3894, + 0.3109, + 0.2275, + 0.1723, + 0.1114, + 0.0361 + ], + "stds": [ + 1.0, + 1.2329, + 0.5616, + 0.199, + 0.0487, + 0.1107, + 0.1594, + 0.0818, + 0.0712, + 0.0568, + 0.0834, + 0.078, + 0.0707, + 0.0776, + 0.1594, + 0.0754, + 0.1003, + 0.0574, + 0.0791, + 0.0747, + 0.0794, + 0.0461 + ] + }, + "warnings": [ + "Only 26 labeled samples; classifier is calibration-only.", + "Do not promote model to production until full 278 labeled equations are available.", + "Collapsed features (1): ['zero_mode_proxy_count']. These dimensions carry no discriminative power." + ] +} \ No newline at end of file