Skip to content

Instantly share code, notes, and snippets.

@fehiepsi
Last active July 24, 2023 15:26
Show Gist options
  • Save fehiepsi/8046cdc3b84b01568962ed1ac64cc2a8 to your computer and use it in GitHub Desktop.
Save fehiepsi/8046cdc3b84b01568962ed1ac64cc2a8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.axes._axes import _log as matplotlib_axes_logger\n",
"matplotlib_axes_logger.setLevel('ERROR')\n",
"import pandas as pd\n",
"import torch\n",
"from torch.nn import Parameter\n",
"\n",
"import pyro\n",
"import pyro.contrib.gp as gp\n",
"import pyro.distributions as dist\n",
"import pyro.ops.stats as stats\n",
"from pyro.infer import SVI, TraceMeanField_ELBO, autoguide\n",
"\n",
"pyro.set_rng_seed(1)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Data shape: (437, 48)\n",
"---------------------\n",
"\n",
"Data labels: ['1', '2', '4', '8', '16', '32 TE', '32 ICM', '64 PE', '64 TE', '64 EPI']\n",
"--------------------------------------------------------------------------------------\n",
"\n",
"Show a small subset of the data:\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actb</th>\n",
" <th>Ahcy</th>\n",
" <th>Aqp3</th>\n",
" <th>Atp12a</th>\n",
" <th>Bmp4</th>\n",
" <th>Cdx2</th>\n",
" <th>Creb312</th>\n",
" <th>Cebpa</th>\n",
" <th>Dab2</th>\n",
" <th>DppaI</th>\n",
" <th>...</th>\n",
" <th>Sox2</th>\n",
" <th>Sall4</th>\n",
" <th>Sox17</th>\n",
" <th>Snail</th>\n",
" <th>Sox13</th>\n",
" <th>Tcfap2a</th>\n",
" <th>Tcfap2c</th>\n",
" <th>Tcf23</th>\n",
" <th>Utf1</th>\n",
" <th>Tspan8</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.541050</td>\n",
" <td>-1.203007</td>\n",
" <td>1.030746</td>\n",
" <td>1.064808</td>\n",
" <td>0.494782</td>\n",
" <td>-0.167143</td>\n",
" <td>-1.369092</td>\n",
" <td>1.083061</td>\n",
" <td>0.668057</td>\n",
" <td>-1.553758</td>\n",
" <td>...</td>\n",
" <td>-1.351757</td>\n",
" <td>-1.793476</td>\n",
" <td>0.783185</td>\n",
" <td>-1.408063</td>\n",
" <td>-0.031991</td>\n",
" <td>-0.351257</td>\n",
" <td>-1.078982</td>\n",
" <td>0.942981</td>\n",
" <td>1.348892</td>\n",
" <td>-1.051999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.680832</td>\n",
" <td>-1.355306</td>\n",
" <td>2.456375</td>\n",
" <td>1.234350</td>\n",
" <td>0.645494</td>\n",
" <td>1.003868</td>\n",
" <td>-1.207595</td>\n",
" <td>1.208023</td>\n",
" <td>0.800388</td>\n",
" <td>-1.435306</td>\n",
" <td>...</td>\n",
" <td>-1.363533</td>\n",
" <td>-1.782172</td>\n",
" <td>1.532477</td>\n",
" <td>-1.361172</td>\n",
" <td>-0.501715</td>\n",
" <td>1.082362</td>\n",
" <td>-0.930112</td>\n",
" <td>1.064399</td>\n",
" <td>1.469397</td>\n",
" <td>-0.996275</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.056038</td>\n",
" <td>-1.280447</td>\n",
" <td>2.046133</td>\n",
" <td>1.439795</td>\n",
" <td>0.828121</td>\n",
" <td>0.983404</td>\n",
" <td>-1.460032</td>\n",
" <td>1.359447</td>\n",
" <td>0.530701</td>\n",
" <td>-1.340283</td>\n",
" <td>...</td>\n",
" <td>-1.296802</td>\n",
" <td>-1.567402</td>\n",
" <td>3.194157</td>\n",
" <td>-1.301777</td>\n",
" <td>-0.445219</td>\n",
" <td>0.031284</td>\n",
" <td>-1.005767</td>\n",
" <td>1.211529</td>\n",
" <td>1.615421</td>\n",
" <td>-0.651393</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.732331</td>\n",
" <td>-1.326911</td>\n",
" <td>2.464234</td>\n",
" <td>1.244323</td>\n",
" <td>0.654359</td>\n",
" <td>0.947023</td>\n",
" <td>-1.265609</td>\n",
" <td>1.215373</td>\n",
" <td>0.765212</td>\n",
" <td>-1.431401</td>\n",
" <td>...</td>\n",
" <td>-1.684100</td>\n",
" <td>-1.915556</td>\n",
" <td>2.962515</td>\n",
" <td>-1.349710</td>\n",
" <td>1.875957</td>\n",
" <td>1.699892</td>\n",
" <td>-1.059458</td>\n",
" <td>1.071541</td>\n",
" <td>1.476485</td>\n",
" <td>-0.699586</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.629333</td>\n",
" <td>-1.244308</td>\n",
" <td>1.316815</td>\n",
" <td>1.304162</td>\n",
" <td>0.707552</td>\n",
" <td>1.429070</td>\n",
" <td>-0.895578</td>\n",
" <td>-0.007785</td>\n",
" <td>0.644606</td>\n",
" <td>-1.381937</td>\n",
" <td>...</td>\n",
" <td>-1.304653</td>\n",
" <td>-1.761825</td>\n",
" <td>1.265379</td>\n",
" <td>-1.320533</td>\n",
" <td>-0.609864</td>\n",
" <td>0.413826</td>\n",
" <td>-0.888624</td>\n",
" <td>1.114394</td>\n",
" <td>1.519017</td>\n",
" <td>-0.798985</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 48 columns</p>\n",
"</div>"
],
"text/plain": [
" Actb Ahcy Aqp3 Atp12a Bmp4 Cdx2 Creb312 \\\n",
"1 0.541050 -1.203007 1.030746 1.064808 0.494782 -0.167143 -1.369092 \n",
"1 0.680832 -1.355306 2.456375 1.234350 0.645494 1.003868 -1.207595 \n",
"1 1.056038 -1.280447 2.046133 1.439795 0.828121 0.983404 -1.460032 \n",
"1 0.732331 -1.326911 2.464234 1.244323 0.654359 0.947023 -1.265609 \n",
"1 0.629333 -1.244308 1.316815 1.304162 0.707552 1.429070 -0.895578 \n",
"\n",
" Cebpa Dab2 DppaI ... Sox2 Sall4 Sox17 Snail \\\n",
"1 1.083061 0.668057 -1.553758 ... -1.351757 -1.793476 0.783185 -1.408063 \n",
"1 1.208023 0.800388 -1.435306 ... -1.363533 -1.782172 1.532477 -1.361172 \n",
"1 1.359447 0.530701 -1.340283 ... -1.296802 -1.567402 3.194157 -1.301777 \n",
"1 1.215373 0.765212 -1.431401 ... -1.684100 -1.915556 2.962515 -1.349710 \n",
"1 -0.007785 0.644606 -1.381937 ... -1.304653 -1.761825 1.265379 -1.320533 \n",
"\n",
" Sox13 Tcfap2a Tcfap2c Tcf23 Utf1 Tspan8 \n",
"1 -0.031991 -0.351257 -1.078982 0.942981 1.348892 -1.051999 \n",
"1 -0.501715 1.082362 -0.930112 1.064399 1.469397 -0.996275 \n",
"1 -0.445219 0.031284 -1.005767 1.211529 1.615421 -0.651393 \n",
"1 1.875957 1.699892 -1.059458 1.071541 1.476485 -0.699586 \n",
"1 -0.609864 0.413826 -0.888624 1.114394 1.519017 -0.798985 \n",
"\n",
"[5 rows x 48 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"URL = \"https://raw.githubusercontent.com/sods/ods/master/datasets/guo_qpcr.csv\"\n",
"\n",
"df = pd.read_csv(URL, index_col=0)\n",
"print(\"Data shape: {}\\n{}\\n\".format(df.shape, \"-\" * 21))\n",
"print(\"Data labels: {}\\n{}\\n\".format(df.index.unique().tolist(), \"-\" * 86))\n",
"print(\"Show a small subset of the data:\")\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"data = torch.tensor(df.values, dtype=torch.get_default_dtype())\n",
"# we need to transpose data to correct its shape\n",
"y = data.t()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"capture_time = y.new_tensor([int(cell_name.split(\" \")[0]) for cell_name in df.index.values])\n",
"# we scale the time into the interval [0, 1]\n",
"time = capture_time.log2() / 6\n",
"\n",
"# we setup the mean of our prior over X\n",
"X_prior_mean = torch.zeros(y.size(1), 2) # shape: 437 x 2\n",
"X_prior_mean[:, 0] = time"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"kernel = gp.kernels.RBF(input_dim=2, lengthscale=torch.ones(2))\n",
"\n",
"# we clone here so that we don't change our prior during the course of training\n",
"X = Parameter(X_prior_mean.clone())\n",
"\n",
"# we will use SparseGPRegression model with num_inducing=32;\n",
"# initial values for Xu are sampled randomly from X_prior_mean\n",
"Xu = stats.resample(X_prior_mean.clone(), 32)\n",
"gplvm = gp.models.SparseGPRegression(X, y, kernel, Xu, noise=torch.tensor(0.01), jitter=1e-5)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# we use `.to_event()` to tell Pyro that the prior distribution for X has no batch_shape\n",
"gplvm.X = pyro.nn.PyroSample(dist.Normal(X_prior_mean, 0.1).to_event())\n",
"gplvm.autoguide(\"X\", dist.Normal)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# note that training is expected to take a minute or so\n",
"losses = gp.util.train(gplvm, num_steps=4000)\n",
"\n",
"# let's plot the loss curve after 4000 steps of training\n",
"plt.plot(losses)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8, 6))\n",
"colors = plt.get_cmap(\"tab10\").colors[::-1]\n",
"labels = df.index.unique()\n",
"\n",
"X = gplvm.X_loc.detach().cpu().numpy()\n",
"for i, label in enumerate(labels):\n",
" X_i = X[df.index == label]\n",
" plt.scatter(X_i[:, 0], X_i[:, 1], c=colors[i], label=label)\n",
"\n",
"plt.legend()\n",
"plt.xlabel(\"pseudotime\", fontsize=14)\n",
"plt.ylabel(\"branching\", fontsize=14)\n",
"plt.title(\"GPLVM on Single-Cell qPCR data\", fontsize=16)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Freeze gplvm for prediction"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"for param in gplvm.parameters():\n",
" param.requires_grad_(False)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"gplvm.mode = \"guide\"\n",
"# fixes X\n",
"del gplvm.X\n",
"gplvm.X = gplvm.X_loc.data"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def model(y_new):\n",
" # set prior for X_new\n",
" X_new = pyro.sample(\"X_new\", dist.Normal(X_prior_mean, 0.1).to_event())\n",
" y_new_loc, y_new_var = gplvm(X_new)\n",
" pyro.sample(\"y_new\", dist.Normal(y_new_loc, y_new_var.sqrt()).to_event(), obs=y_new)\n",
"\n",
"guide = autoguide.AutoDiagonalNormal(model)\n",
"svi = SVI(model, guide, pyro.optim.Adam({\"lr\": 0.01}), TraceMeanField_ELBO())\n",
"losses = []\n",
"y_new = y\n",
"for i in range(4000):\n",
" loss = svi.step(y_new)\n",
" losses.append(loss)\n",
"plt.plot(losses)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8, 6))\n",
"colors = plt.get_cmap(\"tab10\").colors[::-1]\n",
"labels = df.index.unique()\n",
"\n",
"X_new = guide.median()[\"X_new\"].detach()\n",
"for i, label in enumerate(labels):\n",
" X_i = X_new[df.index == label]\n",
" plt.scatter(X_i[:, 0], X_i[:, 1], c=colors[i], label=label)\n",
"\n",
"plt.legend()\n",
"plt.xlabel(\"pseudotime\", fontsize=14)\n",
"plt.ylabel(\"branching\", fontsize=14)\n",
"plt.title(\"GPLVM on Single-Cell qPCR data\", fontsize=16)\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment