Suppose you have a date encoder that encodes just ‘day of week’ and minutes in the day. So it might encode "Thursday 180 minutes (for 3:AM on Thursday). So the encode buffer is really a concatenation of the representation for day-of-week and the representation for ‘minutes’. When you use a “SDR classifier” on the columns in the spatial pooler, you get imperfect results sometimes, and my question is how do you measure error in this case.

I would think that if the minutes were off by maybe ‘8’, then the error would be ‘8’. If the day was off by 2, then the error would be very large, because it would be 2 days * 1440 minutes per day or 2880.

Is there some way to normalize the error, and also, this seems to show that composite encoders, such as the date encoder, have a problem when one of the values (a day) represents a large number of one of the other values (minutes). Is that correct?

I found out (by doing some more coding) that the answer should have been obvious. If, for example, you have a composite encoder lets say a century encoder, where you encode the century in a separate subpart of your encoder than the ‘day’ or the ‘minute’, then one little error in the century means a really large error in the number of minutes. Its not a good idea to have different scales in an encoder.

for example, if part of your encoder encodes “century” as something like

000011111000000

and other part of your encoder encodes 'minutes" as something like

000011111000000

Then a bit flipped in the second subpart of your encoder just means you are off by a minute, while a bit flipped in the first subpart (the part for century) means you are off by a century, or by over 52 million minutes: 100 * year (365 days * 24 hours * 60 minutes/ hour).

We call it a “time of day encoder”, not a “minute of day” encoder, because minutes aren’t really represented. It’s just a sliding window for the progression of time through the day. It’s not really good to try to get minute accuracy out of it. This type of datetime encoding is not precise, but encoders a general idea of time based upon the human calendar for each point.

Also, this discussion might be informative: