Hello,
Umap is fantastic, thank you for all of your work on it and your decision to open source it. I have a feature suggestion / request.
In my analyses, I have often found myself doing something like the following:
Say I have a variable number of 50-Dimensional readings per year for 100 years that I want to visualize. In this scenario, I would flatten the 100 years worth of data into one big list, run that through UMAP, and then make plots where I use the length of each year's dataset as boundaries for which data gets visualized. This way, the dimensions on each plot mean the same thing.
However, doing this is a bit unwieldy. Perhaps the UMAP library can be augmented to have some methods for combing all of the data into the same structure, running that through a UMAP reduction, and then splitting the new data back out into a friendly data structure.
Thoughts?
A "time-varying" UMAP where you can supply a sequence of data arrays (and relations between them -- i.e. which elements in one array correspond the which elements in the next) and get out a sequence of embeddings in an essentially combined embedding space to allow you to see evolution/change of embedding position through time of objects (as well as arrival and departure of objects through time) is on my to do list. The theory is essentially resolved, I'm mostly working on finding a suitable API and designing an efficient implementation. Is that essentially what you need? If so then ... it is on the way.
That sounds great, but a step beyond what I had in mind. The combined embedding space is what I'm looking for, but in my use cases, I don't need to track how the objects change from year to year.
Hi Leland,
I would absolutely love exactly the feature you described. Can't wait for it!! Will it be available in v0.4?
No, I think it would be 0.5 at the earliest. Of course it will be in a dev branch before then.
Is this https://github.com/lmcinnes/umap/commit/bbaafb6df702636fed35dc7e91099e8dffb534f3 where we should look? Would be very happy to try this!
Yes. This gist is a very quick overview: https://gist.github.com/lmcinnes/a655c9382401a3e07915310f7611e8cf
A lot is finalised yet, so if you want to give it a try and provide feedback I would be very happy to hear what worked and what didn't.
Most helpful comment
A "time-varying" UMAP where you can supply a sequence of data arrays (and relations between them -- i.e. which elements in one array correspond the which elements in the next) and get out a sequence of embeddings in an essentially combined embedding space to allow you to see evolution/change of embedding position through time of objects (as well as arrival and departure of objects through time) is on my to do list. The theory is essentially resolved, I'm mostly working on finding a suitable API and designing an efficient implementation. Is that essentially what you need? If so then ... it is on the way.