nx_sketch_kmeans1d.nx
buildroot/runtime/nx_sketch_kmeans1d.nx
about
sketch_kmeans1d.nx -- streaming 1D k-means clustering.
Online single-pass clustering via Lloyd's-style centroid updates.
For each new value x:
1. Find nearest centroid i = argmin |x - centroid[j]|
2. count[i] += 1
3. centroid[i] += (x - centroid[i]) / count[i] (running mean)
Centroids initialized via simple priming: first k distinct values
observed seed the centroids; subsequent values cluster against them.
USE CASES:
- log-message latency clustering (fast / slow / outlier)
- sensor value bucketing
- online categorical discretization
- simple anomaly via distance-to-nearest-centroid
COMPLEMENTS:
- sketch_histogram: pre-defined uniform bins
- sketch_kmeans1d: adaptive bins driven by data density
LOSSLESS-LANGUAGE DISCIPLINE: nx_kmeans_query_centroid returns the
running-mean centroid value with NX_ENV_REL_STDDEV ~ 1/sqrt(count).
Production tier (exact integer running means, no probabilistic error).
dependencies 2 imports · 0 importers
imports: nx_syscalls.nxnx_sketch_types.nx
imported by: nobody (leaf or entry point)
structs
| 38 | struct KMeans1D |
consts
| 35 | const NX_KM_MIN_K: i64 = 2 |
| 36 | const NX_KM_MAX_K: i64 = 1024 |
functions
| 48 | func nx_kmeans_alloc(k: i64) -> *KMeans1D calls 1: sys_mmap |
| 69 | func nx_kmeans_iabs(x: i64) -> i64 called by 1: nx_kmeans_nearest |
| 76 | func nx_kmeans_nearest(m: *KMeans1D, x: i64) -> i64 |
| 94 | func nx_kmeans_observe(m: *KMeans1D, x: i64) -> i64 calls 1: nx_kmeans_nearest |
| 127 | func nx_kmeans_predict(m: *KMeans1D, x: i64) -> i64 calls 1: nx_kmeans_nearest |
| 131 | func nx_kmeans_centroid(m: *KMeans1D, i: i64) -> i64 called by 1: nx_kmeans_query_centroid |
| 137 | func nx_kmeans_count(m: *KMeans1D, i: i64) -> i64 called by 1: nx_kmeans_query_centroid |
| 143 | func nx_kmeans_n_clusters(m: *KMeans1D) -> i64 |
| 147 | func nx_kmeans_total(m: *KMeans1D) -> i64 |
| 153 | func nx_kmeans_isqrt(x: i64) -> i64 called by 1: nx_kmeans_query_centroid |
| 175 | func nx_kmeans_query_centroid(m: *KMeans1D, i: i64) -> *ApproxI64 |
| 189 | func nx_kmeans_memory_bytes(m: *KMeans1D) -> i64 |