diff --git a/docs/api.md b/docs/api.md index 88feba4..56dc55d 100644 --- a/docs/api.md +++ b/docs/api.md @@ -62,7 +62,9 @@ For more background information, see the paper for this software package {cite:p :toctree: generated models.FlowSOMEstimator + models.BatchFlowSOMEstimator models.SOMEstimator + models.BatchSOMEstimator models.ConsensusCluster models.BaseClusterEstimator models.BaseFlowSOMEstimator diff --git a/docs/index.md b/docs/index.md index a101568..13675b9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,6 +7,7 @@ :maxdepth: 1 notebooks/example +notebooks/parallel api.md changelog.md contributing.md diff --git a/docs/notebooks/parallel.ipynb b/docs/notebooks/parallel.ipynb new file mode 100644 index 0000000..f0017e3 --- /dev/null +++ b/docs/notebooks/parallel.ipynb @@ -0,0 +1,369 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Parallel FlowSOM\n", + "\n", + "This notebook details how to run FlowSOM with multiple threads or cores. This parallelization is useful when you have a large dataset and want to speed up the analysis. Mostly the SOM training step is a single-threaded bottleneck. This can be mediated using a batched SOM training implementation. Before you start, consider the following:\n", + "\n", + "- Parallel computations are only useful for datasets with a large number of cells. For small datasets, the overhead of parallelization can make the analysis slower.\n", + "- Since the model will be trained in batches, the results may vary compared to running the analysis on a single core and can be worse. This is because the model is not trained on the entire dataset at once. Make sure your batch size is large enough that your model performance is similar to training without batches.\n", + "- If your need is the processing of multiple files, consider a parallel script running approach. Train a FlowSOM model on a subset of all files and save it. Then, use this saved model in a script with your regular single-threaded FlowSOM workflow to analyze the remaining files in parallel using command-line tools like `xargs` or `parallel`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setup data\n", + "\n", + "We will use a small FCS file with 19.225 cells and 18 markers and load it in an AnnData object. A larger dataset is created with 10x the number of cells in ff_small by copying it 10 times." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AnnData object with n_obs × n_vars = 19225 × 18\n", + " var: 'n', 'channel', 'marker', '$PnB', '$PnE', '$PnG', '$PnR', '$PnV'\n", + " uns: 'meta'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import flowsom as fs\n", + "import anndata as ad\n", + "\n", + "# Load the FCS file\n", + "ff_small = fs.io.read_FCS(\"../../tests/data/ff.fcs\")\n", + "ff_small" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n" + ] + }, + { + "data": { + "text/plain": [ + "AnnData object with n_obs × n_vars = 192250 × 18" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ff_big = ad.concat([ff_small] * 10)\n", + "ff_big" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run single-threaded FlowSOM\n", + "\n", + "On both dataset, we run FlowSOM with a single core to get a baseline for the analysis time. For 20.000 cells, 18 markers and 10x10 SOM grid, the analysis takes around half a second. For 200.000 cells, the analysis takes around 5 seconds, an expectable linear increase in time.\n", + "\n", + "Note that you should cluster on a select number of markers for better clustering results. Here we use all markers for demonstration purposes." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m2024-09-25 14:51:26.960\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:26.962\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:28.664\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:28.806\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:28.807\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:29.128\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:29.256\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:29.257\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:29.581\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:29.701\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:29.701\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:30.000\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "446 ms ± 2.91 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "%%timeit -r 3\n", + "fs.FlowSOM(ff_small.copy(), xdim=10, ydim=10, n_clusters=12, seed=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:51:30.173\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:30.175\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:34.016\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:51:37.182\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:37.183\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:40.750\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:51:43.851\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:43.852\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:47.464\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:51:50.513\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:50.516\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:54.164\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6.7 s ± 52.1 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "%%timeit -r 3\n", + "fs.FlowSOM(ff_big.copy(), xdim=10, ydim=10, n_clusters=20, seed=42)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run parallel FlowSOM\n", + "\n", + "Here we run the same analysis, but with the small dataset in 1 batch and the larger dataset in 10 batches. The 10 batches can be processed in parallel using Numba. The analysis time is similar to the single-threaded implementation for the small dataset. For the large dataset, we see a process time of around 3.5 seconds instead of 7. Note that the speedup depends on the number of available threads and will not be linear. The speedup is also dependent on the batch size and the number of cells in the dataset. You can set the number of threads that Numba uses with the environment variable `NUMBA_NUM_THREADS`. Which package you install for the [threading layer of Numba](https://numba.readthedocs.io/en/stable/user/threading-layer.html) also influences analysis time.\n", + "\n", + "Note that when working with large datasets, the model training might not be the only bottleneck. Other steps in the analysis pipeline, like reading the data, preprocessing, and copying the data might also be slow. Avoiding these steps can further speed up the analysis." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m2024-09-25 14:51:57.338\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:57.340\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:59.778\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:59.957\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:51:59.958\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.050\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.169\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.169\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.267\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.393\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.394\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.487\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "234 ms ± 23.5 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "%%timeit -r 3\n", + "fs.FlowSOM(\n", + " ff_small.copy(), xdim=10, ydim=10, n_clusters=20, seed=42, model=fs.models.BatchFlowSOMEstimator, num_batches=1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:52:00.726\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:00.728\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:01.228\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:52:04.283\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:04.284\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:04.620\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:52:07.674\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:07.675\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:08.016\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "/opt/homebrew/Caskroom/mambaforge/base/envs/flowsom/lib/python3.12/site-packages/anndata/_core/anndata.py:1818: UserWarning: Observation names are not unique. To make them unique, call `.obs_names_make_unique`.\n", + " utils.warn_names_duplicates(\"obs\")\n", + "\u001b[32m2024-09-25 14:52:11.159\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:11.160\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:11.576\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.41 s ± 49.3 ms per loop (mean ± std. dev. of 3 runs, 1 loop each)\n" + ] + } + ], + "source": [ + "%%timeit -r 3\n", + "fs.FlowSOM(\n", + " ff_big.copy(), xdim=10, ydim=10, n_clusters=20, seed=42, model=fs.models.BatchFlowSOMEstimator, num_batches=10\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Compare results\n", + "\n", + "We compare the results of the single-threaded FlowSOM and parallel FlowSOM with 1 batch. Since the SOM and batch SOM implementations are different and stochastic, the results will not be identical. However, the clustering should be similar." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m2024-09-25 14:52:14.558\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:14.559\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:14.923\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:15.059\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m84\u001b[0m - \u001b[34m\u001b[1mReading input.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:15.060\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m86\u001b[0m - \u001b[34m\u001b[1mFitting model: clustering and metaclustering.\u001b[0m\n", + "\u001b[32m2024-09-25 14:52:15.159\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mflowsom.main\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m88\u001b[0m - \u001b[34m\u001b[1mUpdating derived values.\u001b[0m\n" + ] + } + ], + "source": [ + "fsom = fs.FlowSOM(\n", + " ff_small.copy(),\n", + " xdim=10,\n", + " ydim=10,\n", + " n_clusters=12,\n", + " seed=42,\n", + ")\n", + "fsom_batch = fs.FlowSOM(\n", + " ff_small.copy(), xdim=10, ydim=10, n_clusters=20, seed=42, model=fs.models.BatchFlowSOMEstimator, num_batches=1\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p = fs.pl.plot_stars(fsom, background_values=fsom.get_cluster_data().obs.metaclustering)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "p = fs.pl.plot_stars(fsom_batch, background_values=fsom.get_cluster_data().obs.metaclustering)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "flowsom", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src/flowsom/models/__init__.py b/src/flowsom/models/__init__.py index 7133ef6..5f2cfda 100644 --- a/src/flowsom/models/__init__.py +++ b/src/flowsom/models/__init__.py @@ -2,5 +2,6 @@ from .base_cluster_estimator import BaseClusterEstimator # isort:skip from .som_estimator import SOMEstimator # isort:skip from .base_flowsom_estimator import BaseFlowSOMEstimator # isort:skip -from .consensus_cluster import ConsensusCluster -from .flowsom_estimator import FlowSOMEstimator +from .consensus_cluster import ConsensusCluster # isort:skip +from .flowsom_estimator import FlowSOMEstimator # isort:skip +from .batch_flowsom_estimator import BatchFlowSOMEstimator # isort:skip diff --git a/src/flowsom/models/batch/__init__.py b/src/flowsom/models/batch/__init__.py new file mode 100644 index 0000000..01d542c --- /dev/null +++ b/src/flowsom/models/batch/__init__.py @@ -0,0 +1,2 @@ +from ._som import SOM_Batch, map_data_to_codes # isort:skip +from .som_estimator import BatchSOMEstimator # isort:skip diff --git a/src/flowsom/models/batch/_som.py b/src/flowsom/models/batch/_som.py new file mode 100644 index 0000000..71ab5e4 --- /dev/null +++ b/src/flowsom/models/batch/_som.py @@ -0,0 +1,198 @@ +"""Code adapted from student assignment Computational Biology 2024, Ghent University.""" + +from typing import Callable + +import numpy as np +from numba import jit, prange +from sklearn.neighbors import BallTree + +from flowsom.models.numpy_numba import nb_median_axis_0 + + +@jit(nopython=True, fastmath=True) +def eucl_without_sqrt(p1: np.ndarray, p2: np.ndarray): + """Function that computes the Euclidean distance between two points without taking the square root. + + For performance reasons, the square root is not taken. This is useful when comparing distances, because the square + root is a monotonic function, meaning that the order of the distances is preserved. + + Args: + p1 (np.ndarray): The first point. + p2 (np.ndarray): The second point. + + Returns + ------- + float: The Euclidean distance between the two points. + + >>> eucl_without_sqrt(np.array([1, 2, 3]), np.array([4, 5, 6])) + 27.0 + """ + distance = 0.0 + for j in range(p1.shape[0]): + diff = p1[j] - p2[j] + distance += diff * diff + return distance + + +@jit(nopython=True, parallel=True, fastmath=True) +def SOM_Batch( + data: np.ndarray, + codes: np.ndarray, + nhbrdist: np.ndarray, + alphas: tuple, + radii: tuple, + ncodes: int, + rlen: int, + num_batches: int = 10, + distf: Callable[[np.ndarray, np.ndarray], float] = eucl_without_sqrt, + seed=None, +): + """Function that computes the Self-Organizing Map. + + Args: + data (np.ndarray): The data to be clustered. + codes (np.ndarray): The initial codes. + nhbrdist (np.ndarray): The neighbourhood distances. + alphas (tuple): The alphas. + radii (tuple): The radii. + ncodes (int): The number of codes. + rlen (int): The number of iterations. + num_batches (int): The number of batches. + distf (function): The distance function. + seed (int): The seed for the random number generator. + + Returns + ------- + np.ndarray: The computed codes. + """ + if seed is not None: + np.random.seed(seed) + + # Number of data points + n = data[-1].shape[0] + + # Dimension of the data + px = data[0].shape[1] + + # Number of iterations + niter = n + + # The threshold is the radius of the neighbourhood, meaning in which range codes are updated. + # The threshold step decides how much the threshold is decreased each iteration. + treshold_step = (radii[0] - radii[1]) / niter + + # Keep the temporary codes, using the given codes as the initial codes, for every batch + tmp_codes_all = np.empty((num_batches, ncodes, px), dtype=np.float64) + + # Copy the codes as a float64, because the codes are updated in the algorithm + copy_codes = codes.copy().astype(np.float64) + + # Execute some initial serial iterations to get a good init clustering + xdist = np.empty(ncodes, dtype=np.float64) + init_threshold = radii[0] + init_alpha = alphas[0] + + for i in range(niter): + # Choose a random data point + i = np.random.choice(n) + + # Compute the nearest code + nearest = 0 + for cd in range(ncodes): + xdist[cd] = distf(data[0][i, :], copy_codes[cd, :]) + if xdist[cd] < xdist[nearest]: + nearest = cd + + init_alpha = alphas[0] - (alphas[0] - alphas[1]) * i / (niter * rlen) + + for cd in range(ncodes): + # The neighbourhood distance decides whether the code is updated. This states that the code is only updated + # if they are close enough to each other. Otherwise, the value stays the same. + if nhbrdist[cd, nearest] <= init_threshold: + # Update the code based on the difference between the used data point and the code. + for j in range(px): + tmp = data[0][i, j] - copy_codes[cd, j] + copy_codes[cd, j] += tmp * init_alpha + + init_threshold -= treshold_step + + # Choose random data points, for the different batches, and the rlen iterations + data_points_random = np.random.choice(n, num_batches * rlen * n, replace=True) + + # Decrease the number of iterations, because the first iterations are already done + rlen = int(rlen / 2) + + for iteration in range(rlen): + # Execute the batches in parallel + for batch_nr in prange(num_batches): + # Keep the temporary codes, using the given codes as the initial codes + tmp_codes = copy_codes.copy() + + # Array for the distances + xdists = np.empty(ncodes, dtype=np.float64) + + # IMPORTANT: When setting the threshold to radii[0], this causes big changes every iteration. This is not + # wanted, because the algorithm should converge. Therefore, the threshold is decreased every iteration. + # Update: factor 2 is added, to make the threshold decrease faster. + threshold = init_threshold - radii[0] * 2 * iteration / rlen + + for k in range(iteration * niter, (iteration + 1) * niter): + # Get the data point + i = data_points_random[n * rlen * batch_nr + k] + + # Compute the nearest code + nearest = 0 + for cd in range(ncodes): + xdists[cd] = distf(data[batch_nr][i, :], tmp_codes[cd, :]) + if xdists[cd] < xdists[nearest]: + nearest = cd + + if threshold < 1.0: + threshold = 0.5 + alpha = init_alpha - (alphas[0] - alphas[1]) * k / (niter * rlen) + + for cd in range(ncodes): + # The neighbourhood distance decided whether the code is updated. This states that the code is only updated + # if they are close enough to each other. Otherwise, the value stays the same. + if nhbrdist[cd, nearest] <= threshold: + # Update the code based on the difference between the used data point and the code. + for j in range(px): + tmp = data[batch_nr][i, j] - tmp_codes[cd, j] + tmp_codes[cd, j] += tmp * alpha + + threshold -= treshold_step + + tmp_codes_all[batch_nr] = tmp_codes + + # Merge the different SOM's together + copy_codes = nb_median_axis_0(tmp_codes_all).astype(np.float64) + + return copy_codes + + +# ChatGPT generated alternative to map_data_to_codes +def map_data_to_codes(data, codes): + """Returns a tuple with the indices and distances of the nearest code for each data point. + + Args: + data (np.ndarray): The data points. + codes (np.ndarray): The codes that the data points are mapped to. + + Returns + ------- + np.ndarray: The indices of the nearest code for each data point. + np.ndarray: The distances of the nearest code for each data point. + + >>> data_ = np.array([[1, 2, 3], [4, 5, 6]]) + >>> codes_ = np.array([[1, 2, 3], [4, 5, 6]]) + >>> map_data_to_codes(data_, codes_) + (array([0, 1]), array([0., 0.])) + """ + # Create a BallTree for the codes (this is an efficient data structure for nearest neighbor search) + tree = BallTree(codes, metric="euclidean") + + # Query the BallTree to find the nearest code for each data point (k=1 means we only want the nearest neighbor) + dists, indices = tree.query(data, k=1) + + # Flatten the results and return them + return indices.flatten(), dists.flatten() diff --git a/src/flowsom/models/batch/som_estimator.py b/src/flowsom/models/batch/som_estimator.py new file mode 100644 index 0000000..d857417 --- /dev/null +++ b/src/flowsom/models/batch/som_estimator.py @@ -0,0 +1,177 @@ +import igraph as ig +import numpy as np +from scipy.spatial.distance import cdist, pdist, squareform +from sklearn.utils.validation import check_is_fitted + +from flowsom.models.base_cluster_estimator import BaseClusterEstimator + +from . import SOM_Batch, map_data_to_codes + + +# TODO: try to use the same code for both SOMEstimator and BatchSOMEstimator +class BatchSOMEstimator(BaseClusterEstimator): + """Estimate a Self-Organizing Map (SOM) clustering model.""" + + def __init__( + self, + xdim=10, + ydim=10, + rlen=10, + mst=1, + alpha=(0.05, 0.01), + init=False, + initf=None, + map=True, + codes=None, + importance=None, + num_batches=10, + seed=None, + ): + super().__init__() + self.xdim = xdim + self.ydim = ydim + self.rlen = rlen + self.mst = mst + self.alpha = alpha + self.init = init + self.initf = initf + self.map = map + self.codes = codes + self.importance = importance + self.num_batches = num_batches + self.seed = seed + + # Core of the algorithm, where the SOM is executed + def fit( + self, + X, + y=None, + ): + """Perform SOM clustering. + + :param inp: An array of the columns to use for clustering + :type inp: np.array + :param xdim: x dimension of SOM + :type xdim: int + :param ydim: y dimension of SOM + :type ydim: int + :param rlen: Number of times to loop over the training data for each MST (Minimum Spanning Tree) + :type rlen: int + :param importance: Array with numeric values. Parameters will be scaled + according to importance + :type importance: np.array + """ + codes = self.codes + xdim = self.xdim + ydim = self.ydim + importance = self.importance + init = self.init + mst = self.mst + alpha = self.alpha + + if codes is not None: + assert ( + (codes.shape[1] == X.shape[1]) and (codes.shape[0] == xdim * ydim) + ), "If codes is not NULL, it should have the same number of columns as the data and the number of rows should correspond with xdim*ydim" + + if importance is not None: + X = np.stack([X[:, i] * importance[i] for i in range(len(importance))], axis=1) + + # Initialize the grid + grid = [(x, y) for x in range(xdim) for y in range(ydim)] + n_codes = len(grid) + + if self.seed is not None: + np.random.seed(self.seed) + + if codes is None: + if init: + codes = self.initf(X, xdim, ydim) + else: + # If no codes are provided, choose n_codes different random rows from the data + codes = X[np.random.choice(X.shape[0], n_codes, replace=False), :] + + # Initialize the neighbourhood + # First the distances are computed (using the chebyshev distance this means the distance between (1, 1) and + # (1, 2) is one because the highest difference between two coördinates is 1. Using the squareform these are + # converted to a square matrix. This is a symmetric matrix, where the diagonal is 0. + nhbrdist = squareform(pdist(grid, metric="chebyshev")) + + # Initialize the radius + radius = (np.quantile(nhbrdist, 0.67), 0) + + # MST defines the amount of times the data is looped over. If mst is 1, only one radius and alpha is used. + # If mst is higher, the radius and alpha are linearly spaced between the given values + if mst == 1: + radius = [radius] + alpha = [alpha] + else: + radius = np.linspace(radius[0], radius[1], num=mst + 1) + radius = [tuple(radius[i : i + 2]) for i in range(mst)] + alpha = np.linspace(alpha[0], alpha[1], num=mst + 1) + alpha = [tuple(alpha[i : i + 2]) for i in range(mst)] + + # Define the number of batches + num_batches = self.num_batches + + # Split the data for the different batches, where batch with number 0 contains datapoint 0, batch_size, 2*batch_size, ... + data = [] + for i in range(num_batches): + data.append(X[i::num_batches, :]) + + # Make sure all the batches have the same amount of data, if not add the last data point to the last batch + for i in range(num_batches): + if data[i].shape[0] < data[0].shape[0]: + data[i] = np.vstack([data[i], X[-1, :]]) + + # Compute the SOM: mst defines the amount of times the data is looped over + for i in range(mst): + codes = SOM_Batch( + np.array(data, dtype=np.float32), + codes, + nhbrdist, + alphas=alpha[i], + radii=radius[i], + ncodes=n_codes, + rlen=self.rlen, + seed=self.seed, + num_batches=num_batches, + ) + if mst != 1: + nhbrdist: list[list[int]] = _dist_mst(codes) + + clusters, dists = map_data_to_codes(data=X, codes=codes) + self.codes, self.labels_, self.distances = codes.copy(), clusters, dists + self._is_fitted = True + return self + + def predict(self, X, y=None): + """Predict labels using the model.""" + check_is_fitted(self) + # self.distances = cdist(X, self.codes, metric="euclidean") => Not used in the original code + clusters, dists = map_data_to_codes(X, self.codes) + self.labels_ = clusters.astype(int) + self.distances = dists + return self.labels_ + + # Called by the BASE FlowSOM Estimator + def fit_predict(self, X, y=None): + """Fit the model and predict labels.""" + self.fit(X) + # Makes no sense here to call predict again, since the labels are already computed in the fit method + return self.labels_ + + +def _dist_mst(codes) -> list[list[int]]: + adjacency = cdist( + codes, + codes, + metric="euclidean", + ) + full_graph = ig.Graph.Weighted_Adjacency(adjacency, mode="undirected", loops=False) + MST_graph = ig.Graph.spanning_tree(full_graph, weights=full_graph.es["weight"]) + codes = [ + [len(x) - 1 for x in MST_graph.get_shortest_paths(v=i, to=MST_graph.vs.indices, weights=None)] + for i in MST_graph.vs.indices + ] + return codes diff --git a/src/flowsom/models/batch_flowsom_estimator.py b/src/flowsom/models/batch_flowsom_estimator.py new file mode 100644 index 0000000..9f90950 --- /dev/null +++ b/src/flowsom/models/batch_flowsom_estimator.py @@ -0,0 +1,19 @@ +from . import BaseFlowSOMEstimator, ConsensusCluster # isort:skip +from .batch import BatchSOMEstimator # isort:skip + + +class BatchFlowSOMEstimator(BaseFlowSOMEstimator): + """A class that implements the FlowSOM model.""" + + def __init__( + self, + cluster_model=BatchSOMEstimator, + metacluster_model=ConsensusCluster, + **kwargs, + ): + """Initialize the FlowSOMEstimator object.""" + super().__init__( + cluster_model=cluster_model, + metacluster_model=metacluster_model, + **kwargs, + ) diff --git a/src/flowsom/models/numpy_numba.py b/src/flowsom/models/numpy_numba.py new file mode 100644 index 0000000..acf5ab5 --- /dev/null +++ b/src/flowsom/models/numpy_numba.py @@ -0,0 +1,59 @@ +# https://github.com/numba/numba/issues/1269 + +import numba as nb +import numpy as np + + +@nb.njit +def apply_along_axis_0(func1d, arr): + """Like calling func1d(arr, axis=0).""" + if arr.size == 0: + raise RuntimeError("Must have arr.size > 0") + ndim = arr.ndim + if ndim == 0: + raise RuntimeError("Must have ndim > 0") + elif 1 == ndim: + return func1d(arr) + else: + result_shape = arr.shape[1:] + out = np.empty(result_shape, arr.dtype) + _apply_along_axis_0(func1d, arr, out) + return out + + +@nb.njit +def _apply_along_axis_0(func1d, arr, out): + """Like calling func1d(arr, axis=0, out=out). Require arr to be 2d or bigger.""" + ndim = arr.ndim + if ndim < 2: + raise RuntimeError("_apply_along_axis_0 requires 2d array or bigger") + elif ndim == 2: # 2-dimensional case + for i in range(len(out)): + out[i] = func1d(arr[:, i]) + else: # higher dimensional case + for i, out_slice in enumerate(out): + _apply_along_axis_0(func1d, arr[:, i], out_slice) + + +@nb.njit +def nb_mean_axis_0(arr): + """Like calling np.mean(arr, axis=0).""" + return apply_along_axis_0(np.mean, arr) + + +@nb.njit +def nb_std_axis_0(arr): + """Like calling np.std(arr, axis=0).""" + return apply_along_axis_0(np.std, arr) + + +@nb.njit +def nb_amax_axis_0(arr): + """Like calling np.amax(arr, axis=0).""" + return apply_along_axis_0(np.amax, arr) + + +@nb.njit +def nb_median_axis_0(arr): + """Like calling np.median(arr, axis=0).""" + return apply_along_axis_0(np.median, arr) diff --git a/src/flowsom/models/pyFlowSOM_som_estimator.py b/src/flowsom/models/pyFlowSOM_som_estimator.py new file mode 100644 index 0000000..3166db3 --- /dev/null +++ b/src/flowsom/models/pyFlowSOM_som_estimator.py @@ -0,0 +1,90 @@ +import numpy as np +from pyFlowSOM import map_data_to_nodes, som +from sklearn.utils.validation import check_is_fitted + +from . import BaseClusterEstimator + + +class PyFlowSOM_SOMEstimator(BaseClusterEstimator): + """Estimate a Self-Organizing Map (SOM) clustering model using pyFlowSOM SOM implementation.""" + + def __init__( + self, + xdim=10, + ydim=10, + rlen=10, + mst=1, + alpha=(0.05, 0.01), + init=False, + initf=None, + map=True, + codes=None, + importance=None, + seed=None, + ): + super().__init__() + self.xdim = xdim + self.ydim = ydim + self.rlen = rlen + self.mst = mst + self.alpha = alpha + self.init = init + self.initf = initf + self.map = map + self.codes = codes + self.importance = importance + self.seed = seed + + def fit( + self, + X, + y=None, + ): + """Perform SOM clustering. + + :param inp: An array of the columns to use for clustering + :type inp: np.array + :param xdim: x dimension of SOM + :type xdim: int + :param ydim: y dimension of SOM + :type ydim: int + :param rlen: Number of times to loop over the training data for each MST + :type rlen: int + :param importance: Array with numeric values. Parameters will be scaled + according to importance + :type importance: np.array + """ + alpha = self.alpha + X = X.astype("double") + + if self.seed is not None: + np.random.seed(self.seed) + + codes = som( + X, + xdim=self.xdim, + ydim=self.ydim, + rlen=self.rlen, + alpha_range=alpha, + importance=self.importance, + seed=self.seed, + ) + + clusters, dists = map_data_to_nodes(codes, X) + self.codes, self.labels_, self.distances = codes.copy(), clusters.astype(int) - 1, dists + self._is_fitted = True + return self + + def predict(self, X, y=None): + """Predict labels using the model.""" + check_is_fitted(self) + X = X.astype("double") + clusters, dists = map_data_to_nodes(self.codes, X) + self.labels_ = clusters.astype(int) - 1 + self.distances = dists + return self.labels_ + + def fit_predict(self, X, y=None): + """Fit the model and predict labels.""" + self.fit(X) + return self.predict(X) diff --git a/src/flowsom/models/pyflowsom_estimator.py b/src/flowsom/models/pyflowsom_estimator.py new file mode 100644 index 0000000..11d21a5 --- /dev/null +++ b/src/flowsom/models/pyflowsom_estimator.py @@ -0,0 +1,18 @@ +from . import BaseFlowSOMEstimator, ConsensusCluster +from .pyFlowSOM_som_estimator import PyFlowSOM_SOMEstimator + + +class PyFlowSOMEstimator(BaseFlowSOMEstimator): + """A class that implements the FlowSOM model.""" + + def __init__( + self, + cluster_model=PyFlowSOM_SOMEstimator, + metacluster_model=ConsensusCluster, + **kwargs, + ): + super().__init__( + cluster_model=cluster_model, + metacluster_model=metacluster_model, + **kwargs, + ) diff --git a/tests/models/test_BatchFlowSOM.py b/tests/models/test_BatchFlowSOM.py new file mode 100644 index 0000000..7284123 --- /dev/null +++ b/tests/models/test_BatchFlowSOM.py @@ -0,0 +1,35 @@ +from sklearn.metrics import v_measure_score + +from flowsom.models import BatchFlowSOMEstimator + + +def test_clustering(X): + fsom = BatchFlowSOMEstimator(n_clusters=10) + y_pred = fsom.fit_predict(X) + assert y_pred.shape == (100,) + + +def test_clustering_v_measure(X_and_y): + som = BatchFlowSOMEstimator(n_clusters=10) + X, y_true = X_and_y + y_pred = som.fit_predict(X) + score = v_measure_score(y_true, y_pred) + assert score > 0.7 + + +def test_reproducibility_no_seed(X): + fsom_1 = BatchFlowSOMEstimator(n_clusters=10) + fsom_2 = BatchFlowSOMEstimator(n_clusters=10) + y_pred_1 = fsom_1.fit_predict(X) + y_pred_2 = fsom_2.fit_predict(X) + + assert not all(y_pred_1 == y_pred_2) + + +def test_reproducibility_seed(X): + fsom_1 = BatchFlowSOMEstimator(n_clusters=10, seed=0) + fsom_2 = BatchFlowSOMEstimator(n_clusters=10, seed=0) + y_pred_1 = fsom_1.fit_predict(X) + y_pred_2 = fsom_2.fit_predict(X) + + assert all(y_pred_1 == y_pred_2) diff --git a/tests/models/test_pyFlowSOM.py b/tests/models/test_pyFlowSOM.py new file mode 100644 index 0000000..21a4eac --- /dev/null +++ b/tests/models/test_pyFlowSOM.py @@ -0,0 +1,44 @@ +import pytest +from sklearn.metrics import v_measure_score + +# optional import if pyFlowSOM is installed, otherwise use regular FlowSOM for type checking +try: + from flowsom.models.pyflowsom_estimator import PyFlowSOMEstimator +except ImportError: + from flowsom.models import FlowSOMEstimator as PyFlowSOMEstimator + + +@pytest.importorskip("flowsom.models.pyflowsom_estimator") +def test_clustering(X): + fsom = PyFlowSOMEstimator(n_clusters=10) + y_pred = fsom.fit_predict(X) + assert y_pred.shape == (100,) + + +@pytest.importorskip("flowsom.models.pyflowsom_estimator") +def test_clustering_v_measure(X_and_y): + som = PyFlowSOMEstimator(n_clusters=10) + X, y_true = X_and_y + y_pred = som.fit_predict(X) + score = v_measure_score(y_true, y_pred) + assert score > 0.7 + + +@pytest.importorskip("flowsom.models.pyflowsom_estimator") +def test_reproducibility_no_seed(X): + fsom_1 = PyFlowSOMEstimator(n_clusters=10) + fsom_2 = PyFlowSOMEstimator(n_clusters=10) + y_pred_1 = fsom_1.fit_predict(X) + y_pred_2 = fsom_2.fit_predict(X) + + assert not all(y_pred_1 == y_pred_2) + + +@pytest.importorskip("flowsom.models.pyflowsom_estimator") +def test_reproducibility_seed(X): + fsom_1 = PyFlowSOMEstimator(n_clusters=10, seed=0) + fsom_2 = PyFlowSOMEstimator(n_clusters=10, seed=0) + y_pred_1 = fsom_1.fit_predict(X) + y_pred_2 = fsom_2.fit_predict(X) + + assert all(y_pred_1 == y_pred_2)