{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Basic tutorial" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from sklearn.model_selection import train_test_split, StratifiedKFold\n", "from scHPL import train, predict, update, learn, utils, evaluate\n", "import anndata" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data loading\n", "\n", "### Reading a csv file\n", "During this tutorial, we will work with the simulated data. This dataset can be downloaded from the Zenodo repository (https://doi.org/10.5281/zenodo.4557712)\n", "\n", "For scHPL, the input format of the simulated data is a csv file, but easiest is to work with AnnData objects when using scHPL. Here, we will first show, how to load the data and convert it to an AnnData object. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "data = pd.read_csv('Simulated_data.csv', index_col = 0)\n", "data = data.T\n", "\n", "labels = pd.read_csv('Simulated_labels.csv')\n", "labels.columns=['labels']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_1627501/3653877580.py:4: FutureWarning: X.dtype being converted to np.float32 from int64. In the next version of anndata (0.9) conversion will not be automatic. Pass dtype explicitly to avoid this warning. Pass `AnnData(X, dtype=X.dtype, ...)` to get the future behavour.\n", " adata = anndata.AnnData(data.values, row, col)\n", "/exports/humgen/lmichielsen/miniconda3_v2/envs/scarches2/lib/python3.8/site-packages/anndata/_core/anndata.py:1830: UserWarning: Variable names are not unique. To make them unique, call `.var_names_make_unique`.\n", " utils.warn_names_duplicates(\"var\")\n" ] } ], "source": [ "row = dict(obs_names=data.index.astype(str))\n", "col = dict(var_names=data.columns.astype(str))\n", "\n", "adata = anndata.AnnData(data.values, row, col)\n", "\n", "adata.obs = labels" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## scHPL without progressive learning\n", "\n", "Here, we explain how to train a classifier without progressive learning, which can be used when the hierarchy is known beforehand.\n", "\n", "First we split the dataset into a training and test set" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "x_train, x_test, y_train, y_test = train_test_split(adata.X, adata.obs['labels'], test_size=0.2, random_state=42)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Creating a tree\n", "\n", "We create a tree using the utils.create_tree() function. This function creates a tree based on the newick format." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "tree1_oc = utils.create_tree('((Group1, Group2)Group12, Group3,(Group4, (Group5, Group6)Group56)Group456)root')\n", "tree1_knn = utils.create_tree('((Group1, Group2)Group12, Group3,(Group4, (Group5, Group6)Group56)Group456)root')\n", "utils.print_tree(tree1_oc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Training the tree\n", "\n", "Next, we train this tree. This function requires three inputs: the **data** matrix (cells x genes), **labels**, and the **tree**. Furtermore, there are some optional arguments:\n", "\n", "- **classifier**: this can be either **svm_occ** for the one_class svm, **svm** for the linear SVM, or **knn** for the kNearestNeighbor classier (default=kNN). We recommend to use the kNN when you apply scHPL to a latent space of a low number of dimensions (e.g. 10)\n", "- **dimred**: whether to apply dimensionality reduction to select features (default = False).
\n", "For the one-class SVM, this is recommended.
\n", "For the linear SVM, it is recommended to turn off and rely on the built-in L2-regularization.
\n", "We recommend to use the kNN only when applying scHPL on a low number of dimensions (e.g. a latent space of 10), so extra dimensionality is not needed in that case and we recommend to turn this off.\n", "- **useRE**: whether cells are rejected based on the reconstruction error (default = True).\n", "- **FN**: percentage of false negatives allowed when using the reconstruction error (default = 0.5)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# We train one tree with the oneclass SVM and one with the kNN classifier\n", "tree1_oc = train.train_tree(x_train, y_train, tree1_oc, classifier = 'svm_occ', dimred = True, useRE = True, FN = 0.5)\n", "tree1_knn = train.train_tree(x_train, y_train, tree1_knn, classifier = 'knn', dimred = True, useRE = True, FN = 0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## scHPL with progressive learning\n", "\n", "scHPL can be used to learn a hierarchy of cell populations by combining the annotations of different datasets. scHPL, however, is not robust to batch effects between the datasets. We recommend to align the datasets before using scHPL\n", "\n", "### Preprocessing the simulated data\n", "\n", "We will again split the data in a train and test dataset. We will split the training dataset again in 3 batches to simulate different datasets. To simulate the effect of different resolutions in these batches, we have to relabel some of the populations (e.g. 'Group1' and 'Group2' are renamed as 'Group12')\n", "\n", "### Unique labels for the training data\n", "\n", "We merge the labels and batch names to ensure that every training batch has unique cell type labels. Because of this, we can better see the perfect matches in the dataset." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/exports/humgen/lmichielsen/miniconda3_v2/envs/scarches2/lib/python3.8/site-packages/anndata/_core/anndata.py:798: UserWarning: \n", "AnnData expects .obs.index to contain strings, but got values like:\n", " [4607, 2233, 6328, 5815, 4333]\n", "\n", " Inferred to be: integer\n", "\n", " value_idx = self._prep_dim_index(value.index, attr)\n", "/tmp/ipykernel_1627501/1670240449.py:13: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " adata_progressive.obs['batch'].iloc[testindex] = count\n" ] } ], "source": [ "import copy as cp\n", "\n", "sss = StratifiedKFold(n_splits = 3, shuffle = True, random_state = 0)\n", "sss.get_n_splits(x_train, y_train)\n", "\n", "adata_progressive = anndata.AnnData(x_train)\n", "adata_progressive.obs = pd.DataFrame(y_train)\n", "adata_progressive.obs['batch'] = 0\n", "count = 0\n", "\n", "for trainindex, testindex in sss.split(x_train, y_train): \n", " # Add the batch information\n", " adata_progressive.obs['batch'].iloc[testindex] = count\n", " count += 1\n", "\n", "# In batch 1, we merge group1 and group2\n", "xx = np.where((adata_progressive.obs['batch'] == 1) & \n", " ((adata_progressive.obs['labels'] == 'Group1') | (adata_progressive.obs['labels'] == 'Group2')))[0]\n", "adata_progressive.obs['labels'].values[xx] = 'Group12'\n", "\n", "# In batch 1, we merge group4 and group5 and group6\n", "xx = np.where((adata_progressive.obs['batch'] == 1) & \n", " ((adata_progressive.obs['labels'] == 'Group4') | (adata_progressive.obs['labels'] == 'Group5') | (adata_progressive.obs['labels'] == 'Group6')))[0]\n", "adata_progressive.obs['labels'].values[xx] = 'Group456'\n", "\n", "# In batch 2, we merge group5 and group6\n", "xx = np.where((adata_progressive.obs['batch'] == 2) & \n", " ((adata_progressive.obs['labels'] == 'Group5') | (adata_progressive.obs['labels'] == 'Group6')))[0]\n", "adata_progressive.obs['labels'].values[xx] = 'Group56'\n", "\n", "adata_progressive.obs['labels-batch'] = np.char.add(np.char.add(np.array(adata_progressive.obs['labels'], dtype= str), '-'), \n", " np.array(adata_progressive.obs['batch'], dtype=str))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Learning and training the tree\n", "\n", "We learn the tree using the learn.learn_tree() function. \n", "There are different input parameters here:\n", "- **data**: AnnData object containing the different datasets\n", "- **batch_key**: Column name in adata.obs containing batch information \n", "- **batch_order**: List containing the order in which the batches should be added to the tree.\n", "- **cell_type_key**: Column name in adata.obs containing the celltype labels.\n", "- **tree** (default = None): Existing tree to update with the new datasets. If this is the first iteration, enter None.\n", "- **retrain** (default = False): If 'True', the inputted tree will be retrained (needed if tree or datasets are changed after intial construction).\n", "- **batch_added** (default = None): List that indicates which batches were used to build the existing tree.\n", "- **classifier** (default = 'knn'): Classifier to use (either 'svm', 'svm_occ' or 'knn').\n", "- **n_neighbors** (default = 50): Number of neighbors for the kNN classifier (only used when classifier='knn').\n", "- **dimred** (default = False): If 'True' PCA is applied before training the classifier.\n", "- **useRE** (default = True): If 'True', cells are also rejected based on the reconstruction error.\n", "- **FN** (default = 0.5): Percentage of false negatives allowed when determining the threshold for the reconstruction error.\n", "- **rej_threshold** (default = 0.5): If prediction probability lower that this threshold, a cell is rejected (only used when using kNN classifier).\n", "- **match_threshold** (default = 0.25): Threshold to use when matching the labels.\n", "- **attach_missing** (default = False): If 'True' missing nodes are attached to the root node.\n", "- **print_conf** (default = False): Whether to print the confusion matrices during the matching step.\n", "\n", "The function will output the tree and the missing cell populations. \n", "\n", "During the training process, the starting, intermediate and final hierarchies will be shown. The nodes that are added to the tree in the last iteration will be shown in bold." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting tree:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Adding dataset 1 to the tree\n", "\n", "Updated tree:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Adding dataset 2 to the tree\n", "\n", "Updated tree:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "tree2, mp = learn.learn_tree(data = adata_progressive, \n", " batch_key = 'batch',\n", " batch_order = [0,1,2],\n", " cell_type_key = 'labels-batch',\n", " classifier = 'svm_occ', \n", " dimred = True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Predict labels\n", "\n", "A trained tree (with or without progressive learning) can be used to predict the labels of another dataset. When using the one-class SVM or linear SVM, this function only returns the predicted labels. For the kNN, the probabilities are also returned." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "y_pred1_oc, _ = predict.predict_labels(x_test, tree1_oc) # tree constructed without progressive learning\n", "y_pred1_knn, y_prob1_knn = predict.predict_labels(x_test, tree1_knn) # tree constructed without progressive learning\n", "y_pred2, _ = predict.predict_labels(x_test, tree2) # tree constructed with progressive" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Group4' 'Group6' 'Group4' 'Group3' 'Group1' 'Group1' 'Group4' 'Group6'\n", " 'Group1' 'Group5']\n", "[[1. ]\n", " [0.98]\n", " [1. ]\n", " [0.92]\n", " [0.92]\n", " [0.84]\n", " [1. ]\n", " [0.96]\n", " [0.86]\n", " [1. ]]\n" ] } ], "source": [ "print(y_pred1_knn[:10])\n", "print(y_prob1_knn[:10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evaluate\n", "\n", "Here, we evaluate the predictions based on the hierarchical F1-score and look at the confusion matrix.\n", "\n", "For the progressive learning, we cannot look at the HF1-score since the names in the tree and not exactly the same as the names in the original dataset" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hierarchical F1-score without progressive learning: 0.96\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "HF1_score1 = evaluate.hierarchical_F1(y_test.values, y_pred1_oc, tree1_oc)\n", "\n", "print('Hierarchical F1-score without progressive learning: ', \n", " np.round(HF1_score1,2))\n", "\n", "confmatrix1 = evaluate.heatmap(y_test, y_pred1_oc, shape=(6,4))\n", "confmatrix2 = evaluate.heatmap(y_test, y_pred2, shape=(6,4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other useful functions\n", "\n", "Using the utils functions, nodes in the tree can be added, removed, or renamed. Note that after adding or removing a node, the tree has to be retrained." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original tree:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "tree = utils.create_tree('((Group1, Group2)Group12, Group3,(Group4, (Group5, Group6)Group56)Group456)root')\n", "\n", "print('Original tree:')\n", "utils.print_tree(tree)\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tree after adding the new node:\n" ] }, { "data": { "image/png": "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OL1DRNQIbt30hRDDdDrdp0uXLnW5D3IBIDc3Fy+99JLh+PHjPYUQ49n4iUhprtUlb4EQQnh7e6f+61//0sXFxSldTr2GDRumGzhw4AMnT558GMCHStdDRC2bS02H3KLWALyHDRumdB03pdPp8OCDD/qoVKowpWshInLnpu/t7e1tdoeVLn19fVVqtdp109uJqMVw56ZfJyUychMSEtCzZ09ERERgypQpqKysdOh4RERN5VFNX6mM3ISEBJw+fRo//PADSktL8c4779j1+ERE9uJRTV+pjNw///nPEEJACIFBgwbZ/JIhInIVHtX0lc7IraysxAcffID77ruv2edCROQIit+y6UkZuTNnzkRsbCxiYmKackpERA6naNNvaj4u4HoZuS+88AKys7Px9ttv3/rJEBE5iUdN7yiVkfvOO+/giy++wD//+U+oVB71lhKRh/GoDqVURu4TTzyBrKwsDB48GFFRUViyZIlzTpiI6BYpPqffDNJqtdpMDymRkdvQLaBWqxXW388ZEREpxJ2v9LNLSkq0xcXFStfRoB9//LHMYrFcUboOIiK3bfpSSrNer//o/vvvN5WWOj5zvKkZuZs2bZLbtm0rA/D/7V8VEdGtcefpHVy/fn3i0aNHtwYHB8d37NixrGppZan1DhCVZYVK1ialREFBgaqgoMBcWloaI6W80PCriIgcy62bvpTSIoR4BECHM2fOdMZvf7l0mLDy4K8bn3KFb0gVAjgvpSxXuhAiIsDNmz4ASCklgF9++wEAhCZ/BinlN8pVRUTkmty+6TuKEKI9gCgAgcpW4jAFAI5IKbOULoSInIdNvw5CiKE+Pj7/joyMtLRr185tP+y+mWvXrll/+OEHtRDiPinlfqXrISLnYNOvRQjRy8fH54vt27fr7733XqXLcagvvvgCDz300BdCiAFSytNK10NEjueRV7HNFPfII4+oPL3hA8C9996LRx55RAXAtTMnichu2PRttQsNDW0x0Ya/nWt7pesgIudg069Dc3J3jUYjNm/ebMdqmsbX17dR+7lDxjAR2Q+bvp3drOnbO6aRiOhWsek3wsaNGzFo0CBERUVh+vTpsFgs+O6772AwGFBWVoaSkhKEh4fj+PHjSE5Oxr59+xAVFYXXX3/dJqaxuLgYw4cPR79+/RAZGYkdO3bUOaavry8WLlyIPn36IDo6GllZN+6s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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Now we add a node to the tree\n", "tree = utils.add_node(name = 'extra node', tree = tree, parent = 'Group2')\n", "print('Tree after adding the new node:')\n", "utils.print_tree(tree)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tree after removing the node:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Now we remove a node from the tree\n", "# Children = False, indicates that the children should not be removed\n", "tree = utils.remove_node(name = 'Group56', tree = tree, children = False)\n", "print('Tree after removing the node:')\n", "utils.print_tree(tree)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tree after renaming the node:\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# We rename a node\n", "tree = utils.rename_node(old_name = 'Group12', new_name = 'new name', tree = tree)\n", "print('Tree after renaming the node:')\n", "utils.print_tree(tree)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.13" } }, "nbformat": 4, "nbformat_minor": 4 }