Hi everyone,

I have a set of SDRs, so my question is how to classify them?

By what method or what algorithm?

Thank.

Hi everyone,

I have a set of SDRs, so my question is how to classify them?

By what method or what algorithm?

Thank.

Maybe someone else could explain the SDR classifier?

I’m assuming you want to make predictions. You could classify the current SDR by predicting 0 steps into the future, I think.

Here’s the old technique, as I remember it.

For each bit in the temporal memory SDR, there is a corresponding set of units (which are just numbers), one for each input from the encoder. For example, if you had 100 buckets in the encoder and 32000 bits in the SDR, you would have 32000 sets of 100 units.

The end result is a prediction value for each encoder bucket. The best prediction is the bucket with the greatest number, but you can also predict the chance of each bucket by dividing the bucket’s prediction value by the sum of all the values.

Each set of units corresponds to a bit in the SDR, and acts as that bit’s contribution to the prediction when it is true. Each unit contributes to the corresponding bucket. So when the SDR bit is true, the values of its units are added to the unit’s corresponding bucket.

Creating the values of the units is similar to learning in a way. It keeps track of the history of SDRs up to k time steps ago, where k is the distance into the future you are predicting. Each time step, you use the current input’s encoder bucket and the SDR from k steps ago. For each true bit in that SDR, each unit gets a new value of previous value * (1 - x), but you also add x to the unit which corresponds to the current bucket.

On a conceptual level, it basically keeps track of how often each SDR bit being true is followed by each classification k units into the future, and predicts the odds by summing the contribution of each bit.

If you want to predict multiple distances into the future, you need multiple classifier blocks. For example, you would need 10 classifier blocks to predict everything up to 10 steps into the future. Keep in mind that a single block is computationally expensive.

Pseudocode for one classifier block:

- Do everything else (encode the input, create the SDR, etc.)
- For each active bit:

a. Add each corresponding number to

its corresponding bucket’s total - Predicted % chance = 100 * bucket total

/ sum of all bucket totals - For each true bit in the SDR from k steps

ago:

a. For each unit:

i. value *= (1-x)

ii. If the corresponding bucket is the

current encoded input: add x to the

value

See also: