Skip to content

Instantly share code, notes, and snippets.

@JohnEarnest
Created May 14, 2020 17:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JohnEarnest/ece3cd7019be17e1ac9b8068f2256f96 to your computer and use it in GitHub Desktop.
Save JohnEarnest/ece3cd7019be17e1ac9b8068f2256f96 to your computer and use it in GitHub Desktop.
/ the infamous iris dataset
cols:`sepalLength`sepalWidth`petalLength`petalWidth`species
iris:((5.1; 3.5; 1.4; 0.2; `setosa)
(4.9; 3.0; 1.4; 0.2; `setosa)
(4.7; 3.2; 1.3; 0.2; `setosa)
(4.6; 3.1; 1.5; 0.2; `setosa)
(5.0; 3.6; 1.4; 0.2; `setosa)
(5.4; 3.9; 1.7; 0.4; `setosa)
(4.6; 3.4; 1.4; 0.3; `setosa)
(5.0; 3.4; 1.5; 0.2; `setosa)
(4.4; 2.9; 1.4; 0.2; `setosa)
(4.9; 3.1; 1.5; 0.1; `setosa)
(5.4; 3.7; 1.5; 0.2; `setosa)
(4.8; 3.4; 1.6; 0.2; `setosa)
(4.8; 3.0; 1.4; 0.1; `setosa)
(4.3; 3.0; 1.1; 0.1; `setosa)
(5.8; 4.0; 1.2; 0.2; `setosa)
(5.7; 4.4; 1.5; 0.4; `setosa)
(5.4; 3.9; 1.3; 0.4; `setosa)
(5.1; 3.5; 1.4; 0.3; `setosa)
(5.7; 3.8; 1.7; 0.3; `setosa)
(5.1; 3.8; 1.5; 0.3; `setosa)
(5.4; 3.4; 1.7; 0.2; `setosa)
(5.1; 3.7; 1.5; 0.4; `setosa)
(4.6; 3.6; 1.0; 0.2; `setosa)
(5.1; 3.3; 1.7; 0.5; `setosa)
(4.8; 3.4; 1.9; 0.2; `setosa)
(5.0; 3.0; 1.6; 0.2; `setosa)
(5.0; 3.4; 1.6; 0.4; `setosa)
(5.2; 3.5; 1.5; 0.2; `setosa)
(5.2; 3.4; 1.4; 0.2; `setosa)
(4.7; 3.2; 1.6; 0.2; `setosa)
(4.8; 3.1; 1.6; 0.2; `setosa)
(5.4; 3.4; 1.5; 0.4; `setosa)
(5.2; 4.1; 1.5; 0.1; `setosa)
(5.5; 4.2; 1.4; 0.2; `setosa)
(4.9; 3.1; 1.5; 0.1; `setosa)
(5.0; 3.2; 1.2; 0.2; `setosa)
(5.5; 3.5; 1.3; 0.2; `setosa)
(4.9; 3.1; 1.5; 0.1; `setosa)
(4.4; 3.0; 1.3; 0.2; `setosa)
(5.1; 3.4; 1.5; 0.2; `setosa)
(5.0; 3.5; 1.3; 0.3; `setosa)
(4.5; 2.3; 1.3; 0.3; `setosa)
(4.4; 3.2; 1.3; 0.2; `setosa)
(5.0; 3.5; 1.6; 0.6; `setosa)
(5.1; 3.8; 1.9; 0.4; `setosa)
(4.8; 3.0; 1.4; 0.3; `setosa)
(5.1; 3.8; 1.6; 0.2; `setosa)
(4.6; 3.2; 1.4; 0.2; `setosa)
(5.3; 3.7; 1.5; 0.2; `setosa)
(5.0; 3.3; 1.4; 0.2; `setosa)
(7.0; 3.2; 4.7; 1.4; `versicolor)
(6.4; 3.2; 4.5; 1.5; `versicolor)
(6.9; 3.1; 4.9; 1.5; `versicolor)
(5.5; 2.3; 4.0; 1.3; `versicolor)
(6.5; 2.8; 4.6; 1.5; `versicolor)
(5.7; 2.8; 4.5; 1.3; `versicolor)
(6.3; 3.3; 4.7; 1.6; `versicolor)
(4.9; 2.4; 3.3; 1.0; `versicolor)
(6.6; 2.9; 4.6; 1.3; `versicolor)
(5.2; 2.7; 3.9; 1.4; `versicolor)
(5.0; 2.0; 3.5; 1.0; `versicolor)
(5.9; 3.0; 4.2; 1.5; `versicolor)
(6.0; 2.2; 4.0; 1.0; `versicolor)
(6.1; 2.9; 4.7; 1.4; `versicolor)
(5.6; 2.9; 3.6; 1.3; `versicolor)
(6.7; 3.1; 4.4; 1.4; `versicolor)
(5.6; 3.0; 4.5; 1.5; `versicolor)
(5.8; 2.7; 4.1; 1.0; `versicolor)
(6.2; 2.2; 4.5; 1.5; `versicolor)
(5.6; 2.5; 3.9; 1.1; `versicolor)
(5.9; 3.2; 4.8; 1.8; `versicolor)
(6.1; 2.8; 4.0; 1.3; `versicolor)
(6.3; 2.5; 4.9; 1.5; `versicolor)
(6.1; 2.8; 4.7; 1.2; `versicolor)
(6.4; 2.9; 4.3; 1.3; `versicolor)
(6.6; 3.0; 4.4; 1.4; `versicolor)
(6.8; 2.8; 4.8; 1.4; `versicolor)
(6.7; 3.0; 5.0; 1.7; `versicolor)
(6.0; 2.9; 4.5; 1.5; `versicolor)
(5.7; 2.6; 3.5; 1.0; `versicolor)
(5.5; 2.4; 3.8; 1.1; `versicolor)
(5.5; 2.4; 3.7; 1.0; `versicolor)
(5.8; 2.7; 3.9; 1.2; `versicolor)
(6.0; 2.7; 5.1; 1.6; `versicolor)
(5.4; 3.0; 4.5; 1.5; `versicolor)
(6.0; 3.4; 4.5; 1.6; `versicolor)
(6.7; 3.1; 4.7; 1.5; `versicolor)
(6.3; 2.3; 4.4; 1.3; `versicolor)
(5.6; 3.0; 4.1; 1.3; `versicolor)
(5.5; 2.5; 4.0; 1.3; `versicolor)
(5.5; 2.6; 4.4; 1.2; `versicolor)
(6.1; 3.0; 4.6; 1.4; `versicolor)
(5.8; 2.6; 4.0; 1.2; `versicolor)
(5.0; 2.3; 3.3; 1.0; `versicolor)
(5.6; 2.7; 4.2; 1.3; `versicolor)
(5.7; 3.0; 4.2; 1.2; `versicolor)
(5.7; 2.9; 4.2; 1.3; `versicolor)
(6.2; 2.9; 4.3; 1.3; `versicolor)
(5.1; 2.5; 3.0; 1.1; `versicolor)
(5.7; 2.8; 4.1; 1.3; `versicolor)
(6.3; 3.3; 6.0; 2.5; `virginica)
(5.8; 2.7; 5.1; 1.9; `virginica)
(7.1; 3.0; 5.9; 2.1; `virginica)
(6.3; 2.9; 5.6; 1.8; `virginica)
(6.5; 3.0; 5.8; 2.2; `virginica)
(7.6; 3.0; 6.6; 2.1; `virginica)
(4.9; 2.5; 4.5; 1.7; `virginica)
(7.3; 2.9; 6.3; 1.8; `virginica)
(6.7; 2.5; 5.8; 1.8; `virginica)
(7.2; 3.6; 6.1; 2.5; `virginica)
(6.5; 3.2; 5.1; 2.0; `virginica)
(6.4; 2.7; 5.3; 1.9; `virginica)
(6.8; 3.0; 5.5; 2.1; `virginica)
(5.7; 2.5; 5.0; 2.0; `virginica)
(5.8; 2.8; 5.1; 2.4; `virginica)
(6.4; 3.2; 5.3; 2.3; `virginica)
(6.5; 3.0; 5.5; 1.8; `virginica)
(7.7; 3.8; 6.7; 2.2; `virginica)
(7.7; 2.6; 6.9; 2.3; `virginica)
(6.0; 2.2; 5.0; 1.5; `virginica)
(6.9; 3.2; 5.7; 2.3; `virginica)
(5.6; 2.8; 4.9; 2.0; `virginica)
(7.7; 2.8; 6.7; 2.0; `virginica)
(6.3; 2.7; 4.9; 1.8; `virginica)
(6.7; 3.3; 5.7; 2.1; `virginica)
(7.2; 3.2; 6.0; 1.8; `virginica)
(6.2; 2.8; 4.8; 1.8; `virginica)
(6.1; 3.0; 4.9; 1.8; `virginica)
(6.4; 2.8; 5.6; 2.1; `virginica)
(7.2; 3.0; 5.8; 1.6; `virginica)
(7.4; 2.8; 6.1; 1.9; `virginica)
(7.9; 3.8; 6.4; 2.0; `virginica)
(6.4; 2.8; 5.6; 2.2; `virginica)
(6.3; 2.8; 5.1; 1.5; `virginica)
(6.1; 2.6; 5.6; 1.4; `virginica)
(7.7; 3.0; 6.1; 2.3; `virginica)
(6.3; 3.4; 5.6; 2.4; `virginica)
(6.4; 3.1; 5.5; 1.8; `virginica)
(6.0; 3.0; 4.8; 1.8; `virginica)
(6.9; 3.1; 5.4; 2.1; `virginica)
(6.7; 3.1; 5.6; 2.4; `virginica)
(6.9; 3.1; 5.1; 2.3; `virginica)
(5.8; 2.7; 5.1; 1.9; `virginica)
(6.8; 3.2; 5.9; 2.3; `virginica)
(6.7; 3.3; 5.7; 2.5; `virginica)
(6.7; 3.0; 5.2; 2.3; `virginica)
(6.3; 2.5; 5.0; 1.9; `virginica)
(6.5; 3.0; 5.2; 2.0; `virginica)
(6.2; 3.4; 5.4; 2.3; `virginica)
(5.9; 3.0; 5.1; 1.8; `virginica))
/ preamble:
iris: cols!+iris
scale:{a:&/x;b:|/x;w*(x-a)%b-a}
scatter:{{(_x;pico 8 11 9;2 2#y)}'[x;y]} / (data;class)
/ stage 1: raw data
data:+scale'iris`sepalWidth`petalLength
input: scatter[data;(?iris`species)?iris`species]
input
/ stage 2: pick centroids
k:3
c:(-k)?data
input,,(_c;;4 4#1)
/ stage 3: show classified by centroid
membership:{(*<:)'x{%+/t*t:x-y}/:\:y}
draw: {scatter[data;membership[data;c]],,(_c;;4 4#1)}
/ stage 4: refine centroids
clusteraverage: {{(+/x)%#x}'x@.=y}
/ c:clusteraverage[data]@membership[data;c]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment