Properties of the sample

MNIST - handwritten digits/Properties of the sample

Sections

All pixels

Averaged pixels

All pixels

The training sample has a size of 60,000. We shall take every eighth event from the sample to make a more convenient size of 7,500. First load the training sample $A$ (see History and HistoryRepa),

from NISTDev import *

(uu,hrtr) = nistTrainIO()

digit = VarStr("digit")
vv = uvars(uu)
vvl = sset([digit])
vvk = vv - vvl

len(hrvars(hrtr))
785

hrsize(hrtr)
60000

Now take a subset,

hr = hrev([i for i in range(hrsize(hrtr)) if i % 8 == 0],hrtr)

hrsize(hr)
7500

The system is $U$. The sample substrate variables are $V = \mathrm{vars}(A)$, the label variables are $V_{\mathrm{l}} = \{\mathrm{digit}\}$, and the query variables form the remainder, $V_{\mathrm{k}} = V \setminus V_{\mathrm{l}}$.

The query variable valency is 256, $\{|U_w| : w \in V_{\mathrm{k}}\} = \{256\}$,

sset([vol(uu,sset([w])) for w in vvk])
# {256}

The label variable valency is $|U_{\mathrm{digit}}| = 10$,

vol(uu,vvl)
10

rpln(aall(araa(uu,hrred(hr,vvl))))
# ({(digit, 0)}, 743 % 1)
# ({(digit, 1)}, 822 % 1)
# ({(digit, 2)}, 738 % 1)
# ({(digit, 3)}, 745 % 1)
# ({(digit, 4)}, 746 % 1)
# ({(digit, 5)}, 720 % 1)
# ({(digit, 6)}, 707 % 1)
# ({(digit, 7)}, 767 % 1)
# ({(digit, 8)}, 754 % 1)
# ({(digit, 9)}, 758 % 1)

We can image any event by creating a bitmap. There are several utility functions in NISTDev for creating and manipulating bitmaps from a HistoryRepa. For example, this generates bitmaps of the first 25 events placed in a row:

hr1 = hrhrred(hr,vvk)

file = "NIST.bmp"

bmwrite(file,bmhstack([bmborder(1,hrbm(28,1,256,hrev([i],hr1))) for i in range(25)]))

first 25

The entire history can be averaged together, $\hat{A}\%V_{\mathrm{k}}$,

bmwrite(file,bmborder(1,hrbm(28,3,256,hr1)))

average

The pixel variables can be bucketed to reduce the valency from 256 to 2, by partitioning at 128,

(uu,hrtr) = nistTrainBucketedIO(2)

digit = VarStr("digit")
vv = uvars(uu)
vvl = sset([digit])
vvk = vv - vvl

hrsize(hrtr)
60000

hr = hrev([i for i in range(hrsize(hrtr)) if i % 8 == 0],hrtr)

hrsize(hr)
7500

The query variable valency is 2, $\{|U_w| : w \in V_{\mathrm{k}}\} = \{2\}$,

sset([vol(uu,sset([w])) for w in vvk])
# {2}

The first 25 events placed in a row now look slightly coarser,

hr1 = hrhrred(hr,vvk)

bmwrite(file,bmhstack([bmborder(1,hrbm(28,1,2,hrev([i],hr1))) for i in range(25)]))

first 25, bucketed

Again, the entire history can be averaged together, $\hat{A}\%V_{\mathrm{k}}$,

hrbmav = hrbm(28,3,2,hr1)

bmwrite(file,bmborder(1,hrbmav))

average

We can show the average image for each digit, $\{\hat{B}\%V_{\mathrm{k}} : S \in V_{\mathrm{l}}^{\mathrm{CS}},~B = A * \{S\}^{\mathrm{U}}\}$,

bmwrite(file,bmhstack([bmborder(1,hrbm(28,2,2,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for ss in cart(uu,vvl)]))

average digits

Now consider how highly aligned variables might be grouped together. See Entropy and alignment. We will use the tupler to group together highly aligned variables in the substrate, $V$.

Create a shuffled sample, $A_{\mathrm{r}}$,

hrr = historyRepasShuffle_u(hr,1)

hrsize(hrr)
7500

bmwrite(file,bmborder(1,hrbm(28,3,2,hrhrred(hrr,vvk))))

average

The average shuffle looks exactly the same as the average sample, but individual events are, in fact, randomised,

hrr1 = hrhrred(hrr,vvk)

bmwrite(file,bmhstack([bmborder(1,hrbm(28,1,2,hrev([i],hrr1))) for i in range(25)]))

first 25, bucketed

Now optimise the shuffle content alignment with the tuple set builder, $I_{P,U,\mathrm{B,ns,me}}$, \[ \{(\mathrm{algn}(A\%K)-\mathrm{algn}(A_{\mathrm{r}}\%K),~K) : ((K,\cdot,\cdot),\cdot) \in I_{P,U,\mathrm{B,ns,me}}^{ * }((V,~\emptyset,~A,~A_{\mathrm{r}}))\} \]

def buildtup(xmax,omax,bmax,uu,vv,xx,xxrr):
    return list(reversed(list(sset([(algn(rraa(uu,hrred(xx,kk))) - algn(rraa(uu,hrred(xxrr,kk))), kk) for ((kk,_),_) in parametersSystemsBuilderTupleNoSumlayerMultiEffectiveRepa_ui(xmax,omax,bmax,1,uu,vv,fudEmpty(),xx,hrhx(xx),xxrr,hrhx(xxrr))[0]]))))

rpln(buildtup(2**2,10,10,uu,vv,hr,hrr))
# (2291.6372825038998, {<13,9>, <14,9>})
# (2233.4541392531537, {<14,9>, <15,9>})
# (2188.0496248784257, {<14,8>, <15,8>})
# (2172.5493410184863, {<12,9>, <13,9>})
# (2138.315236820694, {<23,11>, <23,12>})
# (2134.5397923793207, {<23,12>, <23,13>})
# (2132.7826762610566, {<12,10>, <13,10>})
# (2130.8430218366993, {<15,9>, <16,9>})
# (2123.8248034136413, {<17,20>, <18,20>})
# (2122.7658721083135, {<14,10>, <15,10>})

ll = buildtup(2**12,10,10,uu,vv,hr,hrr)

rpln(ll)
# (23407.929708607575, {<10,10>, <10,11>, <11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <14,9>, <14,10>})
# (23349.464303283552, {<11,9>, <11,10>, <12,9>, <12,10>, <13,8>, <13,9>, <13,10>, <14,8>, <14,9>, <14,10>, <15,9>, <15,10>})
# (23297.792788153452, {<11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <13,11>, <14,9>, <14,10>, <14,11>})
# (23263.852635704003, {<10,9>, <10,10>, <10,11>, <11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <14,9>})
# (23260.13861789893, {<11,9>, <11,10>, <12,9>, <12,10>, <13,9>, <13,10>, <14,8>, <14,9>, <14,10>, <15,8>, <15,9>, <15,10>})
# (23212.088352065173, {<10,10>, <10,11>, <11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <13,11>, <14,9>})
# (23193.60656502565, {<11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <13,11>, <14,9>, <14,10>, <15,9>})
# (23190.114339541982, {<10,10>, <11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <13,11>, <14,9>, <14,10>})
# (23154.901612698726, {<10,10>, <10,11>, <11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <14,9>, <15,9>})
# (23153.444862459703, {<10,11>, <11,9>, <11,10>, <11,11>, <12,9>, <12,10>, <12,11>, <13,9>, <13,10>, <13,11>, <14,9>, <14,10>})

Let us image the most highly aligned tuple, \[ Q_1~=~\{\mathrm{<10,10>},\dots,~\mathrm{<14,10>}\} \]

def qqhr(d,uu,vv,qq):
    return aahr(uu,single(llss([(v, ValInt(d-1)) for v in qq] + [(v, ValInt(0)) for v in (vv-qq)]),1))

qq1 = ll[0][1]

bmwrite(file,bmborder(1,hrbm(28,3,2,qqhr(2,uu,vvk,qq1))))

12-tuple

Note that the coordinates <x,y> are defined so that the x coordinate increases from top row 1 to bottom row 28, and the y coordinate runs from left column 1 to right column 28.

Showing it overlaid on the average,

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq1)))))

12-tuple over average

Showing it overlaid on the average for each digit,

bmwrite(file,bmhstack([bmborder(1,bmmax(hrbm(28,2,2,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk)),0,0,hrbm(28,2,2,qqhr(2,uu,vvk,qq1)))) for ss in cart(uu,vvl)]))

12-tuple over average

We can see that this substrate tuple appears in the top loop where a three would differ from an eight.

Now let’s image the first 20 states ordered by size descending, $\mathrm{top}(20)(A\%Q_1)$,

pp = list(reversed(list(sset([(b,a) for (a,b) in aall(araa(uu,hrred(hr,qq1)))]))))[:20]

[int(a) for (a,b) in pp]
# [2656, 317, 175, 146, 123, 114, 111, 94, 92, 90, 89, 85, 83, 73, 72, 72, 68, 65, 63, 60]

bmwrite(file,bmhstack([bmborder(1,hrbm(28,1,2,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for (_,ss) in pp]))

qq1 states

The first state is the largest slice. In this case all of the pixels of the tuple are background, so it includes all images where this region is blank. The remaining states all have at least one foreground pixel in this region, for which there are images for most digits except one.

Now optimise again having removed the top tuple from the substrate, and \[ \{(\mathrm{algn}(A\%K)-\mathrm{algn}(A_{\mathrm{r}}\%K),~K) : ((K,\cdot,\cdot),\cdot) \in I_{P,U,\mathrm{B,ns,me}}^{ * }((V \setminus Q_1,~\emptyset,~A,~A_{\mathrm{r}}))\} \]

ll = buildtup(2**12,10,10,uu,vv-qq1,hr,hrr)

rpln(ll)
# (22974.379106386157, {<21,10>, <21,11>, <22,10>, <22,11>, <22,12>, <23,10>, <23,11>, <23,12>, <23,13>, <24,11>, <24,12>, <24,13>})
# (22967.80715755579, {<21,10>, <21,11>, <21,12>, <21,13>, <22,10>, <22,11>, <22,12>, <22,13>, <23,10>, <23,11>, <23,12>, <23,13>})
# (22857.47611313194, {<21,10>, <21,11>, <22,10>, <22,11>, <22,12>, <22,13>, <23,10>, <23,11>, <23,12>, <23,13>, <24,12>, <24,13>})
# (22853.47433214035, {<22,9>, <22,10>, <22,11>, <22,12>, <22,13>, <23,10>, <23,11>, <23,12>, <23,13>, <24,11>, <24,12>, <24,13>})
# (22839.70753834977, {<21,10>, <21,11>, <22,9>, <22,10>, <22,11>, <22,12>, <23,10>, <23,11>, <23,12>, <23,13>, <24,12>, <24,13>})
# (22837.73237196119, {<22,10>, <22,11>, <22,12>, <23,10>, <23,11>, <23,12>, <23,13>, <23,14>, <24,11>, <24,12>, <24,13>, <24,14>})
# (22826.585288632137, {<21,10>, <21,11>, <21,12>, <22,10>, <22,11>, <22,12>, <23,10>, <23,11>, <23,12>, <23,13>, <24,12>, <24,13>})
# (22820.297998690636, {<21,10>, <22,10>, <22,11>, <22,12>, <22,13>, <23,10>, <23,11>, <23,12>, <23,13>, <24,11>, <24,12>, <24,13>})
# (22814.524101103874, {<22,10>, <22,11>, <22,12>, <22,13>, <23,10>, <23,11>, <23,12>, <23,13>, <23,14>, <24,12>, <24,13>, <24,14>})
# (22796.601568398462, {<21,10>, <21,11>, <21,12>, <22,9>, <22,10>, <22,11>, <22,12>, <22,13>, <23,10>, <23,11>, <23,12>, <23,13>})

qq2 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq2)))))

12-tuple over average

This second substrate tuple is nearly as highly aligned as the first. Again it is located where a three would differ from an eight, but now appears in the bottom loop.

Again, let’s image the first 20 states ordered by size descending,

pp = list(reversed(list(sset([(b,a) for (a,b) in aall(araa(uu,hrred(hr,qq2)))]))))[:20]

[int(a) for (a,b) in pp]
# [2651, 274, 168, 161, 123, 122, 116, 103, 102, 88, 88, 83, 82, 76, 75, 72, 69, 67, 66, 65]

bmwrite(file,bmhstack([bmborder(1,hrbm(28,1,2,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for (_,ss) in pp]))

qq2 states

The first state is the largest slice. In this case also, all of the pixels of the tuple are background, so it includes all images where this region is blank. It resembles a non-oblique nine.

Continuing on,

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2,hr,hrr)

rpln(ll)
# (23104.900949518127, {<17,20>, <18,19>, <18,20>, <18,21>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>})
# (22960.349186777927, {<17,20>, <17,21>, <18,20>, <18,21>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>})
# (22840.443227031716, {<17,19>, <17,20>, <18,19>, <18,20>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>})
# (22837.063199354783, {<17,19>, <18,19>, <18,20>, <18,21>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>})
# (22791.67231895468, {<17,20>, <18,19>, <18,20>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>, <22,19>})
# (22789.48599062861, {<17,20>, <18,20>, <18,21>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>, <22,19>})
# (22772.26799923459, {<17,20>, <17,21>, <18,19>, <18,20>, <18,21>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <21,19>, <21,20>})
# (22723.030521171495, {<17,20>, <18,19>, <18,20>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>, <21,21>})
# (22712.286638556525, {<17,19>, <17,20>, <18,19>, <18,20>, <18,21>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <21,19>, <21,20>})
# (22706.68420497635, {<17,20>, <18,20>, <18,21>, <19,19>, <19,20>, <19,21>, <20,19>, <20,20>, <20,21>, <21,19>, <21,20>, <21,21>})

qq3 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq3)))))

12-tuple over average

Again, the third substrate tuple is as highly aligned as the first two. It is located where a five would differ from a two in the bottom loop.

Imaging the first 20 states ordered by size descending,

pp = list(reversed(list(sset([(b,a) for (a,b) in aall(araa(uu,hrred(hr,qq3)))]))))[:20]

[int(a) for (a,b) in pp]
# [2693, 249, 244, 160, 136, 120, 93, 93, 89, 80, 79, 78, 76, 75, 71, 70, 69, 65, 64, 59]

bmwrite(file,bmhstack([bmborder(1,hrbm(28,1,2,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for (_,ss) in pp]))

qq3 states

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3,hr,hrr)

rpln(ll)
# (17356.38849645686, {digit, <13,14>, <13,15>, <13,16>, <14,14>, <14,15>, <14,16>, <15,14>, <15,15>})
# (17314.851785642062, {digit, <13,15>, <13,16>, <14,14>, <14,15>, <14,16>, <15,14>, <15,15>, <15,16>})
# (17305.333682298817, {digit, <13,14>, <13,15>, <14,13>, <14,14>, <14,15>, <15,13>, <15,14>, <15,15>})
# (17259.502357359706, {digit, <12,16>, <13,15>, <13,16>, <14,14>, <14,15>, <14,16>, <15,14>, <15,15>})
# (17240.66817747341, {digit, <13,15>, <13,16>, <14,14>, <14,15>, <14,16>, <15,13>, <15,14>, <15,15>})
# (17081.937598002434, {digit, <13,14>, <13,15>, <14,14>, <14,15>, <15,14>, <15,15>, <16,14>, <16,15>})
# (17070.499385308365, {digit, <13,15>, <13,16>, <14,14>, <14,15>, <14,16>, <15,14>, <15,15>, <16,14>})
# (17055.786924287586, {digit, <12,15>, <13,15>, <13,16>, <14,14>, <14,15>, <14,16>, <15,14>, <15,15>})
# (17044.885096219266, {digit, <13,15>, <14,14>, <14,15>, <15,14>, <15,15>, <16,13>, <16,14>, <16,15>})
# (17039.324314549714, {digit, <13,15>, <13,16>, <14,14>, <14,15>, <14,16>, <15,14>, <15,15>, <16,15>})

Now, in the fourth tuple we see that digit has appeared.

qq4 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq4-vvl)))))

12-tuple over average

This fourth substrate tuple is not as highly aligned as the first three. It is located within the top loop at the bottom.

Imaging the first 20 states ordered by size descending,

pp = list(reversed(list(sset([(b,a) for (a,b) in aall(araa(uu,hrred(hr,qq4)))]))))[:20]

sat = statesVarsValue

[(int(a), sat(ss,digit)) for (a,ss) in pp]
# [(653, 0), (478, 7), (322, 4), (305, 1), (288, 2), (250, 9), (208, 6), (197, 8), (169, 3), (139, 5), (127, 1), (89, 1), (88, 4), (71, 3), (70, 5), (67, 1), (63, 1), (62, 5), (60, 7), (57, 5)]

bmwrite(file,bmhstack([bmborder(1,hrbm(28,1,2,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for (_,ss) in pp]))

qq4 states

In this case, the images are each associcated with a digit value.

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4,hr,hrr)

rpln(ll)
# (21583.42514813407, {<10,19>, <11,19>, <11,20>, <12,18>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <15,19>})
# (21565.369214092865, {<10,19>, <11,19>, <12,18>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <14,20>, <15,19>})
# (21515.941010458548, {<10,19>, <11,19>, <11,20>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <14,20>, <15,19>})
# (21481.863697596393, {<10,19>, <11,18>, <11,19>, <12,18>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <15,19>})
# (21416.80548183016, {<10,19>, <11,18>, <11,19>, <11,20>, <12,18>, <12,19>, <12,20>, <13,18>, <13,19>, <14,18>, <14,19>, <15,19>})
# (21353.65435870437, {<10,19>, <11,19>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <14,20>, <15,19>, <15,20>})
# (21316.354271132936, {<10,19>, <11,19>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <14,20>, <15,18>, <15,19>})
# (21307.252146369683, {<10,19>, <11,18>, <11,19>, <12,18>, <12,19>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <14,20>, <15,19>})
# (21297.206920226832, {<10,19>, <10,20>, <11,19>, <11,20>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <15,19>})
# (21283.91748126134, {<10,19>, <11,19>, <12,18>, <12,19>, <12,20>, <13,18>, <13,19>, <13,20>, <14,18>, <14,19>, <15,18>, <15,19>})

qq5 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq5)))))

12-tuple over average

The fifth substrate tuple, qq5, has slightly lower alignment than the first three, but higher than the fourth, qq4.

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5,hr,hrr)

rpln(ll)
# (21761.47641406216, {<13,8>, <14,8>, <15,8>, <15,9>, <15,10>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <17,10>, <18,9>})
# (21643.640258377673, {<13,8>, <14,8>, <15,8>, <15,9>, <15,10>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <17,10>, <18,8>})
# (21603.015512050486, {<13,8>, <14,8>, <15,7>, <15,8>, <15,9>, <15,10>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <17,10>})
# (21574.38400300072, {<13,8>, <14,8>, <15,8>, <15,9>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <17,10>, <18,8>, <18,9>})
# (21552.30151733259, {<12,8>, <13,8>, <14,8>, <15,8>, <15,9>, <15,10>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <17,10>})
# (21509.49520647218, {<13,8>, <14,8>, <15,8>, <15,9>, <15,10>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <18,8>, <18,9>})
# (21508.588547909407, {<13,8>, <14,8>, <15,8>, <15,9>, <15,10>, <16,8>, <16,9>, <16,10>, <16,11>, <17,8>, <17,9>, <17,10>})
# (21501.01142613017, {<13,8>, <14,8>, <15,8>, <15,9>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <17,10>, <18,9>, <18,10>})
# (21459.632400840906, {<13,8>, <14,8>, <15,7>, <15,8>, <15,9>, <15,10>, <16,7>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>})
# (21453.038356586992, {<13,8>, <14,8>, <15,8>, <15,9>, <15,10>, <16,8>, <16,9>, <16,10>, <17,8>, <17,9>, <17,10>, <18,10>})

qq6 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq6)))))

12-tuple over average

The sixth substrate tuple, qq6, resembles the first substrate tuple, qq1. When adding them together we obtain,

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq1|qq6)))))

12-tuple over average

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6,hr,hrr)

rpln(ll)
# (22489.420460751047, {<18,15>, <18,16>, <19,14>, <19,15>, <19,16>, <20,13>, <20,14>, <20,15>, <20,16>, <21,13>, <21,14>, <21,15>})
# (22432.222910781104, {<18,13>, <18,14>, <18,15>, <19,13>, <19,14>, <19,15>, <20,13>, <20,14>, <20,15>, <21,13>, <21,14>, <21,15>})
# (22383.671016607914, {<18,14>, <18,15>, <19,13>, <19,14>, <19,15>, <20,12>, <20,13>, <20,14>, <20,15>, <21,13>, <21,14>, <21,15>})
# (22365.905164590025, {<18,14>, <18,15>, <18,16>, <19,14>, <19,15>, <19,16>, <20,14>, <20,15>, <20,16>, <21,14>, <21,15>, <21,16>})
# (22264.56837985155, {<18,14>, <18,15>, <19,13>, <19,14>, <19,15>, <20,13>, <20,14>, <20,15>, <21,12>, <21,13>, <21,14>, <21,15>})
# (22223.312134400352, {<18,14>, <18,15>, <18,16>, <19,14>, <19,15>, <19,16>, <20,13>, <20,14>, <20,15>, <20,16>, <21,14>, <21,15>})
# (22213.161553055274, {<18,15>, <18,16>, <19,14>, <19,15>, <19,16>, <20,14>, <20,15>, <20,16>, <21,13>, <21,14>, <21,15>, <21,16>})
# (22179.686139721343, {<18,14>, <18,15>, <18,16>, <19,14>, <19,15>, <19,16>, <20,14>, <20,15>, <20,16>, <21,13>, <21,14>, <21,15>})
# (22173.74295615703, {<17,15>, <18,14>, <18,15>, <19,13>, <19,14>, <19,15>, <20,13>, <20,14>, <20,15>, <21,13>, <21,14>, <21,15>})
# (22142.74951703074, {<18,15>, <18,16>, <19,13>, <19,14>, <19,15>, <19,16>, <20,13>, <20,14>, <20,15>, <20,16>, <21,14>, <21,15>})

qq7 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq7)))))

12-tuple over average

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7,hr,hrr)

rpln(ll)
# (20855.132804664812, {<15,17>, <15,18>, <16,17>, <16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>})
# (20840.095303537077, {<15,18>, <16,17>, <16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>, <20,17>})
# (20630.83117399637, {<16,17>, <16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>, <20,17>, <20,18>})
# (20601.044419759968, {<15,18>, <16,17>, <16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>, <20,18>})
# (20556.711049208014, {<15,18>, <16,17>, <16,18>, <16,19>, <16,20>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>})
# (20516.735456510894, {<15,18>, <16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>, <20,17>, <20,18>})
# (20454.344857458327, {<16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>, <20,17>, <20,18>, <21,17>})
# (20436.09923262436, {<15,18>, <16,17>, <16,18>, <16,19>, <17,16>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>})
# (20366.847226964914, {<2,20>, <15,18>, <16,17>, <16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>})
# (20365.055467495687, {<4,6>, <15,18>, <16,17>, <16,18>, <16,19>, <17,17>, <17,18>, <17,19>, <18,17>, <18,18>, <19,17>, <19,18>})

qq8 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq8)))))

12-tuple over average

Continuing on,

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8,hr,hrr)

rpln(ll)
# (21638.18626128333, {<16,12>, <16,13>, <16,14>, <16,15>, <17,12>, <17,13>, <17,14>, <17,15>, <18,12>, <18,13>, <18,14>, <19,13>})
# (21609.984725045386, {<16,12>, <16,13>, <16,14>, <16,15>, <17,12>, <17,13>, <17,14>, <18,12>, <18,13>, <18,14>, <19,12>, <19,13>})
# (21592.67009164659, {<16,12>, <16,13>, <16,14>, <16,15>, <17,12>, <17,13>, <17,14>, <17,15>, <18,12>, <18,13>, <18,14>, <19,12>})
# (21528.97842413271, {<16,12>, <16,13>, <16,14>, <16,15>, <17,11>, <17,12>, <17,13>, <17,14>, <17,15>, <18,12>, <18,13>, <18,14>})
# (21512.334769560475, {<16,12>, <16,13>, <16,14>, <16,15>, <17,12>, <17,13>, <17,14>, <17,15>, <18,11>, <18,12>, <18,13>, <18,14>})
# (21456.25679233699, {<16,12>, <16,13>, <16,14>, <16,15>, <17,11>, <17,12>, <17,13>, <17,14>, <18,11>, <18,12>, <18,13>, <18,14>})
# (21403.439001992254, {<16,11>, <16,12>, <16,13>, <16,14>, <16,15>, <17,11>, <17,12>, <17,13>, <17,14>, <18,11>, <18,12>, <18,13>})
# (21367.71290302565, {<16,11>, <16,12>, <16,13>, <16,14>, <16,15>, <17,11>, <17,12>, <17,13>, <17,14>, <18,12>, <18,13>, <18,14>})
# (21347.439969852006, {<16,11>, <16,12>, <16,13>, <16,14>, <16,15>, <17,12>, <17,13>, <17,14>, <17,15>, <18,12>, <18,13>, <18,14>})
# (21340.052110554607, {<16,12>, <16,13>, <16,14>, <16,15>, <17,11>, <17,12>, <17,13>, <17,14>, <17,15>, <18,11>, <18,12>, <18,13>})

qq9 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq9)))))

12-tuple over average

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9,hr,hrr)

rpln(ll)
# (21135.007196751125, {<6,12>, <6,13>, <6,14>, <6,15>, <7,11>, <7,12>, <7,13>, <7,14>, <7,15>, <8,11>, <8,12>, <8,13>})
# (21022.871958359097, {<6,12>, <6,13>, <6,14>, <6,15>, <7,12>, <7,13>, <7,14>, <7,15>, <8,12>, <8,13>, <8,14>, <8,15>})
# (21008.886890636255, {<6,12>, <6,13>, <6,14>, <6,15>, <7,11>, <7,12>, <7,13>, <7,14>, <7,15>, <8,12>, <8,13>, <8,14>})
# (20979.21306589527, {<6,12>, <6,13>, <6,14>, <6,15>, <7,12>, <7,13>, <7,14>, <7,15>, <8,11>, <8,12>, <8,13>, <8,14>})
# (20917.158803059552, {<6,13>, <6,14>, <6,15>, <7,11>, <7,12>, <7,13>, <7,14>, <7,15>, <8,11>, <8,12>, <8,13>, <8,14>})
# (20848.651218395073, {<6,12>, <6,13>, <6,14>, <6,15>, <6,16>, <7,12>, <7,13>, <7,14>, <7,15>, <8,12>, <8,13>, <8,14>})
# (20801.77063803292, {<6,11>, <6,12>, <6,13>, <6,14>, <6,15>, <7,12>, <7,13>, <7,14>, <7,15>, <8,12>, <8,13>, <8,14>})
# (20763.408676788615, {<6,11>, <6,12>, <6,13>, <6,14>, <6,15>, <7,11>, <7,12>, <7,13>, <7,14>, <7,15>, <8,12>, <8,13>})
# (20728.801724287594, {<6,13>, <6,14>, <6,15>, <7,12>, <7,13>, <7,14>, <7,15>, <8,11>, <8,12>, <8,13>, <8,14>, <8,15>})
# (20723.745830955988, {<6,13>, <6,14>, <6,15>, <6,16>, <7,12>, <7,13>, <7,14>, <7,15>, <8,12>, <8,13>, <8,14>, <8,15>})

qq10 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq10)))))

12-tuple over average

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10,hr,hrr)

rpln(ll)
# (21002.90496698302, {<12,12>, <12,13>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <15,13>, <16,11>})
# (20985.425239605152, {<11,13>, <12,12>, <12,13>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <15,13>})
# (20958.335251870125, {<11,12>, <11,13>, <12,12>, <12,13>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>})
# (20922.084025382144, {<11,12>, <12,12>, <12,13>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <15,13>})
# (20736.362772044602, {<12,12>, <12,13>, <12,14>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <15,13>})
# (20599.927693008645, {<11,12>, <11,13>, <12,12>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <15,13>})
# (20550.560663871554, {<11,13>, <12,12>, <12,13>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <16,11>})
# (20476.139671750916, {<11,12>, <12,12>, <12,13>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <16,11>})
# (20444.256797367347, {<11,12>, <12,12>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>, <15,13>, <16,11>})
# (20420.52061794775, {<11,13>, <11,14>, <12,12>, <12,13>, <13,11>, <13,12>, <13,13>, <14,11>, <14,12>, <14,13>, <15,11>, <15,12>})

qq11 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq11)))))

12-tuple over average

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10-qq11,hr,hrr)

rpln(ll)
# (20262.481208318823, {<7,18>, <7,19>, <7,20>, <8,18>, <8,19>, <8,20>, <8,21>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>})
# (20110.149527143985, {<7,19>, <7,20>, <7,21>, <8,19>, <8,20>, <8,21>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>, <11,21>})
# (20085.92248401114, {<7,18>, <7,19>, <7,20>, <8,18>, <8,19>, <8,20>, <8,21>, <9,18>, <9,19>, <9,20>, <9,21>, <10,20>})
# (20062.67766533998, {<7,18>, <7,19>, <7,20>, <8,19>, <8,20>, <8,21>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>, <11,21>})
# (20058.36273021924, {<7,19>, <7,20>, <8,19>, <8,20>, <8,21>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>, <11,21>, <12,21>})
# (19990.490983666587, {<7,18>, <7,19>, <7,20>, <7,21>, <8,19>, <8,20>, <8,21>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>})
# (19970.40011596435, {<7,19>, <7,20>, <8,19>, <8,20>, <8,21>, <9,19>, <9,20>, <9,21>, <9,22>, <10,20>, <10,21>, <11,21>})
# (19962.661872371667, {<7,19>, <7,20>, <8,19>, <8,20>, <8,21>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>, <10,22>, <11,21>})
# (19958.417007575656, {<7,19>, <7,20>, <8,18>, <8,19>, <8,20>, <8,21>, <9,18>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>})
# (19940.15639291197, {<7,18>, <7,19>, <8,18>, <8,19>, <8,20>, <8,21>, <9,18>, <9,19>, <9,20>, <9,21>, <10,20>, <10,21>})

qq12 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq12)))))

12-tuple over average

Having removed 12 tuples, there is plenty of alignment in the remaining substrate. The union of the 12 tuples is

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,(qq1|qq2|qq3|qq4|qq5|qq6|qq7|qq8|qq9|qq10|qq11|qq12)-vvl)))))

12-tuple over average

We can continue in this way,

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10-qq11-qq12,hr,hrr)

qq13 = ll[0][1]

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10-qq11-qq12-qq13,hr,hrr)

qq14 = ll[0][1]

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10-qq11-qq12-qq13-qq14,hr,hrr)

qq15 = ll[0][1]

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10-qq11-qq12-qq13-qq14-qq15,hr,hrr)

qq16 = ll[0][1]

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10-qq11-qq12-qq13-qq14-qq15-qq16,hr,hrr)

qq17 = ll[0][1]

ll = buildtup(2**12,10,10,uu,vv-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9-qq10-qq11-qq12-qq13-qq14-qq15-qq16-qq17,hr,hrr)

rpln(ll)
# (18202.790918012604, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,11>, <25,12>, <25,13>, <25,14>, <25,15>})
# (18184.08594121058, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,12>, <25,13>, <25,14>, <25,15>, <25,16>})
# (18144.412940493505, {<21,16>, <22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,12>, <25,13>, <25,14>, <25,15>})
# (18016.48051264869, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,12>, <25,13>, <25,14>, <25,15>, <26,14>})
# (18011.880832053263, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,12>, <25,13>, <25,14>, <25,15>, <26,15>})
# (17962.517647791818, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,12>, <25,13>, <25,14>, <25,15>, <26,12>})
# (17945.29579780344, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,12>, <25,13>, <25,14>, <25,15>, <26,13>})
# (17926.086378929896, {<21,16>, <22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,13>, <25,14>, <25,15>, <25,16>})
# (17921.076683220715, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,13>, <25,14>, <25,15>, <25,16>, <25,17>})
# (17875.589239621342, {<22,13>, <22,14>, <22,15>, <23,14>, <23,15>, <24,14>, <24,15>, <25,13>, <25,14>, <25,15>, <25,16>, <26,15>})

qq18 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,qq18)))))

12-tuple over average

The union of the first 18 tuples is

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(28,3,2,qqhr(2,uu,vvk,(qq1|qq2|qq3|qq4|qq5|qq6|qq7|qq8|qq9|qq10|qq11|qq12|qq13|qq14|qq15|qq16|qq17|qq18)-vvl)))))

12-tuple over average

Averaged pixels

The pixel variables can be averaged as well as bucketed to reduce the dimension from 28x28 to 9x9. Here 3x3 square regions are bucketed to have 8 values. (Note that the load requires around 2.5 GB memory.)

(uu,hrtr) = nistTrainBucketedAveragedIO(8,9,0)

digit = VarStr("digit")
vv = uvars(uu)
vvl = sset([digit])
vvk = vv - vvl

hr = hrev([i for i in range(hrsize(hrtr)) if i % 8 == 0],hrtr)

hrsize(hr)
7500

The query variable valency is 8, $\{|U_w| : w \in V_{\mathrm{k}}\} = \{8\}$,

sset([vol(uu,sset([w])) for w in vvk])
# {8}

The first 25 events placed in a row now look blurrier,

hr1 = hrhrred(hr,vvk)

bmwrite(file,bmhstack([bmborder(1,hrbm(9,3,8,hrev([i],hr1))) for i in range(25)]))

first 25, bucketed

Again, the entire history can be averaged together, $\hat{A}\%V_{\mathrm{k}}$,

hrbmav = hrbm(9,3*3,8,hr1)

bmwrite(file,bmborder(1,hrbmav))

average

We can show the average image for each digit, $\{\hat{B}\%V_{\mathrm{k}} : S \in V_{\mathrm{l}}^{\mathrm{CS}},~B = A * \{S\}^{\mathrm{U}}\}$,

bmwrite(file,bmhstack([bmborder(1,hrbm(9,2*3,8,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for ss in cart(uu,vvl)]))

average digits

Again, consider how highly aligned variables might be grouped together. Create a shuffled sample, $A_{\mathrm{r}}$,

hrr = historyRepasShuffle_u(hr,1)

hrsize(hrr)
7500

Now optimise the shuffle content alignment with the tuple set builder, $I_{P,U,\mathrm{B,ns,me}}$, \[ \{(\mathrm{algn}(A\%K)-\mathrm{algn}(A_{\mathrm{r}}\%K),~K) : ((K,\cdot,\cdot),\cdot) \in I_{P,U,\mathrm{B,ns,me}}^{ * }((V,~\emptyset,~A,~A_{\mathrm{r}}))\} \]

def buildtup(xmax,omax,bmax,uu,vv,xx,xxrr):
    return list(reversed(list(sset([(algn(rraa(uu,hrred(xx,kk))) - algn(rraa(uu,hrred(xxrr,kk))), kk) for ((kk,_),_) in parametersSystemsBuilderTupleNoSumlayerMultiEffectiveRepa_ui(xmax,omax,bmax,1,uu,vv,fudEmpty(),xx,hrhx(xx),xxrr,hrhx(xxrr))[0]]))))

rpln(buildtup(8**2,10,10,uu,vvk,hr,hrr))
# (1778.3439485839262, {<5,3>, <6,3>})
# (1546.4243938068685, {<5,8>, <6,8>})
# (1508.297779876615, {<4,3>, <5,3>})
# (1452.2331641622513, {<6,7>, <7,7>})
# (1410.4253862658807, {<8,3>, <8,4>})
# (1236.2427473031858, {<7,7>, <8,7>})
# (1192.1885900411507, {<6,8>, <7,8>})
# (1180.8147592081878, {<5,7>, <6,7>})
# (1174.0988978699388, {<4,8>, <5,8>})
# (1171.3702751695928, {<8,4>, <8,5>})

ll = buildtup(8**4,10,10,uu,vvk,hr,hrr)

rpln(ll)
# (5682.351019334106, {<5,3>, <5,8>, <6,3>, <6,8>})
# (5552.604687655745, {<4,3>, <5,3>, <5,8>, <6,3>})
# (5337.095505255653, {<5,3>, <5,8>, <6,3>, <7,3>})
# (5274.019275638675, {<4,8>, <5,3>, <5,8>, <6,3>})
# (5260.718020426779, {<4,3>, <5,3>, <6,3>, <6,8>})
# (5164.163585010243, {<4,3>, <5,3>, <6,3>, <7,3>})
# (5093.746288077142, {<5,8>, <6,3>, <6,8>, <7,3>})
# (5059.289354936685, {<5,3>, <6,3>, <6,8>, <7,3>})
# (5028.322281669007, {<4,3>, <5,3>, <5,7>, <6,3>})
# (5026.611555818628, {<5,8>, <6,3>, <6,8>, <7,8>})

ll = buildtup(8**5,10,10,uu,vvk,hr,hrr)

rpln(ll)
# (8050.553866086997, {<4,3>, <5,3>, <5,8>, <6,3>, <6,8>})
# (7998.912572413858, {<5,3>, <5,8>, <6,3>, <6,8>, <7,3>})
# (7820.9715551441805, {<4,8>, <5,3>, <5,8>, <6,3>, <6,8>})
# (7800.100864466516, {<5,3>, <5,8>, <6,3>, <6,8>, <7,8>})
# (7731.101242843724, {<4,3>, <4,8>, <5,3>, <5,8>, <6,3>})
# (7621.316722082192, {<4,8>, <5,3>, <5,8>, <6,3>, <7,3>})
# (7539.52093791958, {<5,3>, <5,7>, <5,8>, <6,3>, <6,8>})
# (7520.485299578861, {<4,3>, <5,3>, <5,8>, <6,3>, <7,3>})
# (7495.3678382320395, {<5,8>, <6,3>, <6,8>, <7,3>, <7,8>})
# (7430.563038948512, {<4,3>, <5,3>, <5,7>, <5,8>, <6,3>})

Let us image the most highly aligned tuple,

def qqhr(d,uu,vv,qq):
    return aahr(uu,single(llss([(v, ValInt(d-1)) for v in qq] + [(v, ValInt(0)) for v in (vv-qq)]),1))

qq1 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(9,3*3,8,qqhr(8,uu,vvk,qq1)))))

5-tuple centred regions

The first tuple is split into two clusters on the left and right of the averaged image.

Now let’s image the first 20 states ordered by size descending, $\mathrm{top}(20)(A\%Q_1)$,

pp = list(reversed(list(sset([(b,a) for (a,b) in aall(araa(uu,hrred(hr,qq1)))]))))[:20]

[int(a) for (a,b) in pp]
# [3165, 177, 154, 125, 108, 95, 94, 87, 72, 69, 49, 44, 42, 41, 40, 35, 33, 31, 27, 27]

bmwrite(file,bmhstack([bmborder(1,hrbm(9,3,8,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for (_,ss) in pp]))

qq1 centred region states

Now optimise again having removed the top tuple from the substrate,

ll = buildtup(8**5,10,10,uu,vvk-qq1,hr,hrr)

rpln(ll)
# (6552.725968278681, {<2,6>, <7,3>, <7,4>, <8,3>, <8,4>})
# (6470.476739248241, {<3,3>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6360.00856836614, {<3,3>, <3,4>, <7,7>, <7,8>, <8,7>})
# (6351.090494764196, {<5,7>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6310.23267732935, {<2,4>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6267.855911086894, {<3,7>, <7,3>, <7,4>, <8,3>, <8,4>})
# (6250.538787034926, {<6,7>, <7,3>, <7,7>, <7,8>, <8,7>})
# (6245.4011219204585, {<3,4>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6126.752957233486, {<6,7>, <7,7>, <7,8>, <8,7>, <8,8>})
# (6092.669300136113, {<2,6>, <3,7>, <7,3>, <8,3>, <8,4>})

qq2 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(9,3*3,8,qqhr(8,uu,vvk,qq2)))))

5-tuple over average

Again, let’s image the first 20 states ordered by size descending,

pp = list(reversed(list(sset([(b,a) for (a,b) in aall(araa(uu,hrred(hr,qq2)))]))))[:20]

[int(a) for (a,b) in pp]
# [2034, 242, 131, 127, 115, 82, 82, 75, 71, 55, 55, 45, 41, 34, 29, 23, 22, 22, 20, 19]

bmwrite(file,bmhstack([bmborder(1,hrbm(9,3,8,hrhrred(hrhrsel(hr,aahr(uu,single(ss,1))),vvk))) for (_,ss) in pp]))

qq2 states

Continuing on,

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2,hr,hrr)

rpln(ll)
# (6470.476739248241, {<3,3>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6360.00856836614, {<3,3>, <3,4>, <7,7>, <7,8>, <8,7>})
# (6351.090494764196, {<5,7>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6310.23267732935, {<2,4>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6245.4011219204585, {<3,4>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6126.752957233486, {<6,7>, <7,7>, <7,8>, <8,7>, <8,8>})
# (6057.676763678517, {<2,5>, <6,7>, <7,7>, <7,8>, <8,7>})
# (6030.4634853367115, {<3,3>, <3,4>, <6,7>, <7,7>, <8,7>})
# (6024.011956005892, {<2,4>, <3,3>, <7,7>, <7,8>, <8,7>})
# (5876.455495421929, {<2,4>, <3,4>, <7,7>, <7,8>, <8,7>})

qq3 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(9,3*3,8,qqhr(8,uu,vvk,qq3)))))

5-tuple over average

We can continue in this way,

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2-qq3,hr,hrr)

rpln(ll)

qq4 = ll[0][1]

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2-qq3-qq4,hr,hrr)

rpln(ll)

qq5 = ll[0][1]

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2-qq3-qq4-qq5,hr,hrr)

rpln(ll)

qq6 = ll[0][1]

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2-qq3-qq4-qq5-qq6,hr,hrr)

rpln(ll)

qq7 = ll[0][1]

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2-qq3-qq4-qq5-qq6-qq7,hr,hrr)

rpln(ll)
# (2148.123502836578, {<3,6>, <4,6>, <5,6>, <6,6>, <9,4>})
# (2138.15403044073, {<3,6>, <4,6>, <5,6>, <6,6>, <9,3>})
# (2099.5540951074927, {<3,2>, <4,2>, <4,6>, <5,6>, <6,6>})
# (2089.041993971011, {<3,6>, <4,6>, <5,1>, <5,6>, <6,6>})
# (2088.5029974702784, {<3,6>, <4,6>, <5,6>, <6,6>, <9,9>})
# (2088.215315397827, {<3,6>, <4,6>, <5,6>, <6,6>, <7,1>})
# (2087.5041497117636, {<3,1>, <3,6>, <4,6>, <5,6>, <6,6>})
# (2087.070183093523, {<3,6>, <4,6>, <5,6>, <6,6>, <9,2>})
# (2087.052164588021, {<3,6>, <4,6>, <5,6>, <6,6>, <8,1>})
# (2086.070665216217, {<3,2>, <3,6>, <4,6>, <5,6>, <6,6>})

qq8 = ll[0][1]

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(9,3*3,8,qqhr(8,uu,vvk,qq8)))))

5-tuple over average

Now the alignment has decreased significantly.

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8,hr,hrr)

rpln(ll)

qq9 = ll[0][1]

ll = buildtup(8**5,10,10,uu,vvk-qq1-qq2-qq3-qq4-qq5-qq6-qq7-qq8-qq9,hr,hrr)

rpln(ll)
(1091.9729017068748, {<2,7>, <2,8>, <4,5>, <7,2>, <8,2>})
(989.9015106783045, {<2,7>, <2,8>, <7,2>, <8,2>, <9,3>})
(975.724964808549, {<2,7>, <2,8>, <5,9>, <7,2>, <8,2>})
(962.8047501522524, {<2,7>, <2,8>, <2,9>, <7,2>, <8,2>})
(962.3862594156308, {<2,7>, <2,8>, <4,9>, <7,2>, <8,2>})
(958.7063695781835, {<2,7>, <2,8>, <7,2>, <8,2>, <9,2>})
(936.4720997172553, {<2,7>, <2,8>, <7,2>, <8,2>, <9,6>})
(935.6995871323525, {<2,7>, <2,8>, <3,9>, <7,2>, <8,2>})
(932.8303721981865, {<1,7>, <2,7>, <2,8>, <7,2>, <8,2>})
(924.2819900327377, {<2,7>, <2,8>, <7,2>, <8,1>, <8,2>})

qq10 = ll[0][1]

Now, after 10 tuples, the alignments are much decreased and the union is

bmwrite(file,bmborder(1,bmmax(hrbmav,0,0,hrbm(9,3*3,8,qqhr(8,uu,vvk,qq1|qq2|qq3|qq4|qq5|qq6|qq7|qq8|qq9|qq10)))))

5-tuple over average


top