CGA Interval Classifier
Ported from a standalone JS/Canvas prototype into real PatLang, compiled to WASM and run live below — see the Paradigms Guide for the numeric tower this interval arithmetic builds on, and the k-blade page for the broader geometric-algebra-as-representation idea this demo's dimensionality reduction is one small example of.
A CGA point embeds a 2D location plus an uncertainty radius as an INTERVAL-valued null vector; a CGA sphere is the same components as plain scalars. Their inner product is therefore an interval, not a single number -- a pixel is only certified inside or outside when zero falls strictly outside that interval; when the interval straddles zero, the classifier honestly reports it ambiguous rather than rounding arbitrarily. Every embedded point is also checked against the Minkowski null-cone identity X² = 0, certifying the embedding itself, not just the classification built on it.
The dataset lives in a synthetic 5D sparse space and is projected down to the 2D plane the classifier sees via a structural k-blade (projected = sum(component × blade)). Toggle Dimensionality Projection to compare a deliberate blade-guided projection (which cancels most of the hidden dimension's cross-plane noise) against naively summing raw components (which lets that noise bleed straight into the visible plane) -- the same k-blade-instead-of-scalar-tensor idea explored on the k-blade page.
PatLang source
# Validated interval Conformal Geometric Algebra (CGA) point-in-sphere
# classifier, with k-blade dimensionality reduction of a sparse 5D
# dataset down to the 2D plane the classifier actually operates on.
#
# A CGA point embeds a 2D location (x, y) plus an uncertainty radius r as
# an INTERVAL-valued null vector: e1/e2 carry [x-r, x+r]/[y-r, y+r], and
# eInf/eO carry the interval bounds of the point's squared norm (the
# conformal embedding that makes "inside/outside a sphere" a single inner
# product). A CGA sphere is the same 4 components as plain scalars. The
# inner product of an interval point against a scalar sphere yields an
# INTERVAL, not a single number -- classification is only certain when
# zero is NOT inside that interval (strictly inside or strictly outside);
# when the interval straddles zero, the pixel is honestly reported
# ambiguous rather than arbitrarily rounded one way.
#
# Every valid CGA point must satisfy the Minkowski null-cone identity
# X^2 = 0 exactly; verify_minkowski checks that 0 is provably trapped
# inside the interval-arithmetic worst-case bounds of X^2 for an embedded
# point, certifying the embedding itself is correct, not just plausible.
#
# The dataset is generated in a synthetic 5D sparse space (d1..d5, only
# d1/d2/d3 ever populated) and projected down to the 2D plane via a
# structural k-blade: projected_x = sum(component * blade.x), projected_y
# = sum(component * blade.y). Toggling reduction on/off shows the
# difference between a deliberate blade-guided projection (which cancels
# most of d3's cross-plane noise) and naively summing raw components
# (which lets that noise bleed straight into the visible plane).
#
# All randomness uses a small seeded LCG (PatLang has no RNG host
# function) so the SAME seed always reproduces the SAME dataset --
# argv carries the seed explicitly, so re-classifying with a new epsilon/
# sphere/projection mode (same seed) never jitters the point layout, only
# a genuinely "new" dataset request passes a new seed.
make a function called rand_seed takes seed returns done
let s = seed % 2147483647
let mut s2 = s
if s <= 0 then
s2 = 1
end
set_var("cga_rand", s2)
return true
end
make a function called rand_next returns r
let s = to_num(get("__vars", "cga_rand"))
let s2 = (s * 48271) % 2147483647
set_var("cga_rand", s2)
return s2
end
# A pseudo-random float in [-1, 1].
make a function called rand_signed returns r
let n = rand_next()
let frac = (n % 20000) / 10000
return frac - 1
end
# ---- interval-valued CGA point / scalar sphere -----------------------
# Interval point: [e1_lo, e1_hi, e2_lo, e2_hi, eInf_lo, eInf_hi, eO_lo, eO_hi]
# Scalar sphere: [e1, e2, eInf, eO]
make a function called cga_embed takes x, y, r returns pt
let norm2 = x * x + y * y
let dist = sqrt(norm2)
let norm2_lo = max(0, norm2 - 2 * r * dist + r * r)
let norm2_hi = norm2 + 2 * r * dist + r * r
return [x - r, x + r, y - r, y + r, 0.5 * norm2_lo, 0.5 * norm2_hi, 1.0, 1.0]
end
make a function called cga_create_sphere takes cx, cy, radius returns sph
let norm2 = cx * cx + cy * cy
return [cx, cy, 0.5 * (norm2 - radius * radius), 1.0]
end
# Returns [lo, hi] of the inner product X . S (interval point . scalar sphere).
make a function called cga_inner_point_sphere takes pt, sph returns bounds
let e1_lo = pt[0]
let e1_hi = pt[1]
let e2_lo = pt[2]
let e2_hi = pt[3]
let eInf_lo = pt[4]
let eInf_hi = pt[5]
let eO_lo = pt[6]
let sph_e1 = sph[0]
let sph_e2 = sph[1]
let sph_eInf = sph[2]
let sph_eO = sph[3]
let t1a = e1_lo * sph_e1
let t1b = e1_hi * sph_e1
let term1_lo = min(t1a, t1b)
let term1_hi = max(t1a, t1b)
let t2a = e2_lo * sph_e2
let t2b = e2_hi * sph_e2
let term2_lo = min(t2a, t2b)
let term2_hi = max(t2a, t2b)
let cross_lo = eInf_lo * sph_eO + eO_lo * sph_eInf
let cross_hi = eInf_hi * sph_eO + eO_lo * sph_eInf
return [term1_lo + term2_lo - cross_hi, term1_hi + term2_hi - cross_lo]
end
# Returns [is_zero_trapped (1/0), lo, hi] for X^2 of an interval point.
make a function called cga_verify_minkowski takes pt returns result
let e1_lo = pt[0]
let e1_hi = pt[1]
let e2_lo = pt[2]
let e2_hi = pt[3]
let eInf_lo = pt[4]
let eInf_hi = pt[5]
let eO_lo = pt[6]
let eO_hi = pt[7]
let x1a = e1_lo * e1_lo
let x1b = e1_hi * e1_hi
let x1_sq_lo = min(x1a, x1b)
let x1_sq_hi = max(x1a, x1b)
let x2a = e2_lo * e2_lo
let x2b = e2_hi * e2_hi
let x2_sq_lo = min(x2a, x2b)
let x2_sq_hi = max(x2a, x2b)
let cross_lo = 2 * (eInf_lo * eO_lo)
let cross_hi = 2 * (eInf_hi * eO_hi)
let x_sq_lo = (x1_sq_lo + x2_sq_lo) - cross_hi
let x_sq_hi = (x1_sq_hi + x2_sq_hi) - cross_lo
let mut trapped = 0
if (x_sq_lo <= 0.00001) and (x_sq_hi >= 0 - 0.00001) then
trapped = 1
end
return [trapped, x_sq_lo, x_sq_hi]
end
# 0 = inside, 1 = outside, 2 = ambiguous (zero is inside the inner-product interval).
# This PseudoCGA embedding's sign convention makes the point-sphere inner
# product POSITIVE when inside the sphere and NEGATIVE when outside (the
# opposite of the "standard" CGA convention some references use) -- what
# matters for a valid classifier is that it's monotonic and consistent,
# verified directly: a point at the sphere's own center gives a strictly
# positive interval, a point far outside gives a strictly negative one.
make a function called classify_pixel takes x, y, epsilon, sph returns status
let pt = cga_embed(x, y, epsilon)
let bounds = cga_inner_point_sphere(pt, sph)
let lo = bounds[0]
let hi = bounds[1]
if lo > 0 then
return 0
else
if hi < 0 then
return 1
else
return 2
end
end
end
# Hierarchical tree of joins & bisection field: a second, structurally
# different classifier -- instead of one algebraic inner product against a
# single sphere, this walks a subsample of the projected point cloud
# (every 3rd point, matching the "join" -- each point contributes a
# nearest-neighbour vote rather than a single global surface) and
# classifies a pixel by whichever label's nearest point is closer. The
# gap between the two candidate distances stands in for the sphere's
# uncertainty radius: a pixel sitting roughly equidistant from both
# labels' nearest points is exactly the "bisection" boundary, reported
# ambiguous the same honest way the CGA sphere classifier reports zero
# trapped inside its inner-product interval.
make a function called bisection_classify_pixel takes x, y, epsilon, proj_points, n returns status
let mut min_dist_a = 999999999
let mut min_dist_b = 999999999
let mut i = 0
while i < n do
let p = proj_points[i]
let dx = p[0] - x
let dy = p[1] - y
let d = sqrt(dx * dx + dy * dy)
if p[2] == 0 then
min_dist_a = min(min_dist_a, d)
else
min_dist_b = min(min_dist_b, d)
end
i = i + 3
end
if abs(min_dist_a - min_dist_b) < epsilon then
return 2
else
if min_dist_a < min_dist_b then
return 0
else
return 1
end
end
end
# ---- sparse 5D dataset + k-blade dimensionality reduction -------------
make a function called project_point takes d1, d2, d3, use_reduction returns xy
if use_reduction then
let px = d1 * 1.0 + d2 * 0.0 + d3 * 0.1
let py = d1 * 0.0 + d2 * 1.0 + d3 * (0 - 0.1)
return [px, py]
else
return [d1 + d3, d2 + d3]
end
end
make a function called add_cluster takes points, base_d1, base_d2, base_d3, label, count, jitter returns points2
let mut i = 0
while i < count do
let d1 = base_d1 + rand_signed() * jitter
let d2 = base_d2 + rand_signed() * jitter
let d3 = base_d3 + rand_signed() * (jitter + 3)
let points = list_push(points, [d1, d2, d3, label])
i = i + 1
end
return points
end
make a function called build_dataset takes name returns points
let mut points = []
if name == "xor" then
points = add_cluster(points, 130, 130, 65, 0, 15, 6)
points = add_cluster(points, 370, 370, 0 - 65, 0, 15, 6)
points = add_cluster(points, 130, 370, 0 - 65, 1, 15, 6)
points = add_cluster(points, 370, 130, 65, 1, 15, 6)
else
if name == "circles" then
let mut i = 0
while i < 60 do
let a = (to_num(i) / 60) * 6.2831853
points = add_cluster(points, 250 + cos(a) * 75, 250 + sin(a) * 75, 45, 0, 1, 3)
points = add_cluster(points, 250 + cos(a) * 190, 250 + sin(a) * 190, 0 - 45, 1, 1, 3)
i = i + 1
end
else
let mut i = 0
while i < 90 do
let theta = (to_num(i) / 90) * 10.9955743
let r = 15 + (to_num(i) / 90) * 200
points = add_cluster(points, 250 + cos(theta) * r, 250 + sin(theta) * r, 40, 0, 1, 3)
points = add_cluster(points, 250 + cos(theta + 3.14159265) * r, 250 + sin(theta + 3.14159265) * r, 0 - 40, 1, 1, 3)
i = i + 1
end
end
end
return points
end
# ---- main: generate, project, classify, render -------------------------
make a function called run_classifier takes unused returns done
let args = argv()
let dataset = args[0]
let use_reduction = args[1] == "reduced"
let epsilon = to_num(args[2])
let sphere_x = to_num(args[3])
let sphere_y = to_num(args[4])
let sphere_r = to_num(args[5])
let seed = to_num(args[6])
let classifier = args[7]
let use_bisection = classifier == "bisection_field"
rand_seed(seed)
let raw_points = build_dataset(dataset)
let sph = cga_create_sphere(sphere_x, sphere_y, sphere_r)
let n = to_num(list_len(raw_points))
let mut proj_points = []
let mut i = 0
while i < n do
let p = raw_points[i]
let xy = project_point(p[0], p[1], p[2], use_reduction)
proj_points = list_push(proj_points, [xy[0], xy[1], p[3]])
i = i + 1
end
print("GRID")
let step = 4
let mut gy = 0
while gy < 500 do
let line = sb_new()
let mut gx = 0
while gx < 500 do
let mut status = 0
if use_bisection then
status = bisection_classify_pixel(gx, gy, epsilon, proj_points, n)
else
status = classify_pixel(gx, gy, epsilon, sph)
end
sb_push(line, "" + status)
gx = gx + step
end
print(sb_str(line))
gy = gy + step
end
print("POINTS")
let mut i2 = 0
while i2 < n do
let pp = proj_points[i2]
print(pp[0] + "," + pp[1] + "," + pp[2])
i2 = i2 + 1
end
print("INVARIANT")
let sample_pt = cga_embed(252, 252, epsilon)
let check = cga_verify_minkowski(sample_pt)
print(check[0] + "," + check[1] + "," + check[2])
return true
end
run_classifier(0)
Interpreted run on the build machine (pat --ir-run, dataset=xor):
GRID 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111122222222222222222211111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111112222222222222222222222222221111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111112222222222222222222222222222222222111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111112222222222222222222222222222222222222221111111111111111111111111111111111111111 11111111111111111111111111111111111111111111222222222222222222222222222222222222222222221111111111111111111111111111111111111 11111111111111111111111111111111111111111122222222222222222222222222222222222222222222222211111111111111111111111111111111111 11111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222111111111111111111111111111111111 11111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222211111111111111111111111111111111 11111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222111111111111111111111111111111 11111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111 11111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222111111111111111111111111111 11111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222211111111111111111111111111 11111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111 11111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222111111111111111111111111 11111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111111111 11111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111111111 11111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111111111 11111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111111111 11111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111111 11111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111111 11111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111111 11111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111 11111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111 11111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111 11111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111 11111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111 11111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111 11111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111 11111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111 11111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111 11111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111 11111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111 11111111111111112222222222222222222222222222222222222222200000002222222222222222222222222222222222222222222222222221111111111 11111111111111122222222222222222222222222222222222222200000000000002222222222222222222222222222222222222222222222221111111111 11111111111111122222222222222222222222222222222222220000000000000000022222222222222222222222222222222222222222222222111111111 11111111111111222222222222222222222222222222222222000000000000000000000222222222222222222222222222222222222222222222111111111 11111111111111222222222222222222222222222222222220000000000000000000000022222222222222222222222222222222222222222222111111111 11111111111111222222222222222222222222222222222200000000000000000000000002222222222222222222222222222222222222222222211111111 11111111111112222222222222222222222222222222222000000000000000000000000000222222222222222222222222222222222222222222211111111 11111111111112222222222222222222222222222222220000000000000000000000000000022222222222222222222222222222222222222222211111111 11111111111112222222222222222222222222222222220000000000000000000000000000002222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222200000000000000000000000000000002222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222200000000000000000000000000000000222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222000000000000000000000000000000000222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222000000000000000000000000000000000022222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222000000000000000000000000000000000022222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222220000000000000000000000000000000000022222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222220000000000000000000000000000000000022222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222220000000000000000000000000000000000002222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222220000000000000000000000000000000000002222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222220000000000000000000000000000000000002222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222220000000000000000000000000000000000002222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222220000000000000000000000000000000000022222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222000000000000000000000000000000000022222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222000000000000000000000000000000000022222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222000000000000000000000000000000000022222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222200000000000000000000000000000000222222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222200000000000000000000000000000000222222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222220000000000000000000000000000000222222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222220000000000000000000000000000002222222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222222000000000000000000000000000022222222222222222222222222222222222222222222111111 11111111111222222222222222222222222222222222222200000000000000000000000000222222222222222222222222222222222222222222221111111 11111111111222222222222222222222222222222222222220000000000000000000000000222222222222222222222222222222222222222222221111111 11111111111222222222222222222222222222222222222222000000000000000000000022222222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222222222200000000000000000000222222222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222222222222000000000000000002222222222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222222222222220000000000002222222222222222222222222222222222222222222222222221111111 11111111111122222222222222222222222222222222222222222222222000022222222222222222222222222222222222222222222222222222211111111 11111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111 11111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111 11111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111 11111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111 11111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111 11111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111 11111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111 11111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111 11111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111 11111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111 11111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111 11111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111 11111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111 11111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111 11111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111 11111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111 11111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111 11111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111 11111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111111 11111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111111 11111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111111 11111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111111111 11111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222211111111111111111111 11111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111111111111 11111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111111111111 11111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222211111111111111111111111 11111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111 11111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222211111111111111111111111111 11111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222111111111111111111111111111 11111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222221111111111111111111111111111 11111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222111111111111111111111111111111 11111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222221111111111111111111111111111111 11111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222111111111111111111111111111111111 11111111111111111111111111111111111111222222222222222222222222222222222222222222222222222211111111111111111111111111111111111 11111111111111111111111111111111111111112222222222222222222222222222222222222222222222221111111111111111111111111111111111111 11111111111111111111111111111111111111111112222222222222222222222222222222222222222222111111111111111111111111111111111111111 11111111111111111111111111111111111111111111122222222222222222222222222222222222222211111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111122222222222222222222222222222222211111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111122222222222222222222222222211111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111222222222222222211111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 POINTS 135.90234,120.53666,0 131.39367,122.41313,0 131.49878999999999,127.70080999999999,0 130.83723,119.08397000000001,0 136.28037,123.65723,0 138.90485999999999,127.87993999999999,0 134.50728,119.44352,0 140.27883,127.98017,0 137.3319,126.7271,0 139.33923,125.25376999999999,0 134.80863000000002,119.35037,0 132.89943,128.91857000000002,0 141.97803,128.11217000000002,0 135.74658000000002,128.43362,0 131.21988,122.90252000000001,0 366.94292,377.80548,0 366.91613,372.67647,0 365.03051,373.86609000000004,0 369.26756,377.85984,0 364.49993,372.48447,0 358.42535,371.48445000000004,0 358.73609,373.09611,0 363.53729000000004,374.81690999999995,0 357.67796,372.38124,0 362.61293,373.20927,0 360.12464,379.56036,0 366.40541,377.71119,0 366.4973,381.8085,0 365.89457,376.55583,0 363.59797999999995,371.14182000000005,0 122.31908000000001,380.20872,1 126.45209,379.47831,1 126.07172,375.79848,1 120.61007,373.39353,1 121.47161,374.75559,1 124.82230999999999,380.84649,1 123.97805000000001,375.69374999999997,1 117.78743,376.64817,1 117.34283,372.51897,1 121.18991,379.98909,1 120.89252,379.82508,1 119.35195999999999,379.70904,1 121.06136,370.34604,1 124.93912999999999,381.22887,1 126.70736,377.33844,1 379.65252000000004,127.00268000000001,1 371.51475,117.44645,1 373.14678000000004,122.96882,1 370.2885,119.69630000000001,1 379.8603,120.6695,1 376.27961999999997,127.15478,1 377.88696,120.78224,1 381.54417,119.65943,1 376.82535,118.51505,1 372.90003,122.24236999999998,1 371.81403,128.54177,1 381.40491,126.10289,1 370.53999,127.18301,1 377.46903,124.73237000000002,1 373.16949,129.38891,1 INVARIANT 1,-20505.163625232468,20793.163625232482 true
Dataset (5D sparse space)
Dimensionality projection
Classifier engine
Uncertainty radius ε: 12px
Minkowski invariant (X² = 0)
starting...
Click the grid to move the sphere. ● class A ● class B