NMF
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.6k
- Forks
- 779
- Avg merge
- 1d 4h
- Merged PRs (30d)
- 27
Description
What kind of feature would you like to request?
New analysis tool: A simple analysis tool you have been using and are missing in sc.tools?
Please describe your wishes
I've thought for a while that we should have NMF in scanpy (https://github.com/scverse/scanpy/pull/941).
But it's always been pretty trivial to implement, so not that much work for someone to cover. But now that we're increasing the amount of out of core support in scanpy I think we can offer a lot more value here with out-of-core NMF support.
I would suggest we start with a simple sklearn.decompositions.NMF wrapper for in memory datasets.
For out of core implementations, it'll be a bit more work. Some thoughts:
sklearnoffersMiniBatchNMFwhich allows updating by batch. While this is out of core, it's effectively serial and may not scale well with increasing compute- But there are many distributed NMF implementations out there (including GPU specific ones, which is relevant for rapids-singlecell)
- It would be nice to upstream whatever we do to dask-ml (https://github.com/dask/dask-ml/issues/96), maybe cuml
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the existing analysis tools exposed through sc.tools and the sklearn.decomposition.NMF API. Establish the scope of the initial in-memory wrapper before assessing MiniBatchNMF and distributed or GPU implementations for out-of-core support. Done means the agreed NMF capability is integrated into scanpy with behavior and scope documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, scikit-learn
- Domain
- distributed-systems, machine-learning
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100