Multi-label decoding/regression in TDT

Dear Martin and other experts,

I am wondering whether there is any way to perform multi-label classification/regression in TDT or if there might be a straightforward way to implement something like that?
Background: I’m trying to decode a circular stimulus feature (orientation) without losing the periodic nature of the data (i.e. the difference btw. 2° and 358° is 4°, not 356°). One option that I thought of is to extract the sin and cos components of my orientation labels and use them as “label sets” for training and testing, making this essentially a multi-label/multi-output regression problem.

I would be happy to hear about any thoughts that you might have on the issue :slight_smile:

Best,
Simon

Hi Simon,

We once had a similar issue where we needed multi-labels. This was, however, for a specific type or regularization that was applied for each searchlight separately, which needed to be passed along. Usually, a single label is sufficient. If you are interested in decoding circular stimulus features, for classification this should not matter, since each class is treated as separate anyway (here the error function is the relevant part I guess, e.g. what you apply to a confusion matrix). For regression, this is more difficult, since you pass a stimulus feature through a function not optimized for circular statistics. I see two approaches:
(1) figure out if there is a regularized regression approach for circular statistics.
(2) figure out a classification or regression approach that predicts both components at the same time (multi-target classification or regression).

In the latter approach, I would then use dummy labels for the original design matrix (e.g. the angles) which are internally remapped to sin and cos. TDT allows you to generate your own routines for classification and add them. Under decoding_software, check out the approach for libsvm_train and libsvm_test. Apply something similar. Say your approach is called multisvm. Then create a function multisvm_train.m and multisvm_test.m with the same structure as libsvm_train or any other examples. Finally, set cfg.decoding.software = 'multisvm'; and figure out how you would like to transform your results (e.g. what are you predicting and how do you want to relate your prediction to ground truth). You may need to create a new transres_ function for this. Details for doing this should be described in our paper or in the toolbox itself.

So, Tl’Dr: It is possible but may require a little bit of work on your end, but it should be worth it.

Hope this helps!
Martin

Hi Martin,
this definitely helps, thanks for the insight! I will try to implement a solution in TDT based on your suggestions first, before looking for alternative approaches.
Best wishes,
Simon