Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
{
"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",
"\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.set_prior(\"X\", 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": "iVBORw0KGgoAAAANSUhEUgAAAZMAAAD8CAYAAACyyUlaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAH25JREFUeJzt3XuUnHWd5/H3t6rvCbk1zS2JdALhLmpsMQ5eGDKQgI7BUXdx5gwZlj3xKM6o6GqQ3cXBwyzqrDLsInNQLmF1RWT0kFUgZgEPq3JJR27hEtISICGBbsg9TV/ru388v+pUOlXV1XV7qtOf1zl16qlf/Z7n9+2nk/r0c6nnMXdHRESkFIm4CxARkYlPYSIiIiVTmIiISMkUJiIiUjKFiYiIlExhIiIiJVOYiIhIyRQmIiJSMoWJiIiUrC7uAqrlyCOP9Pb29rjLEBGZUNavX/+mu7eN1W/ShEl7ezudnZ1xlyEiMqGY2SuF9NNuLhERKZnCRERESqYwERGRkilMRESkZAoTEREpmcJERERKpjAREZGSKUzGsO7lHfzzmo0MDafiLkVEpGYpTMbwxKs7+Z8PddE/pDAREclFYTKGxrokgMJERCQPhckYGuqiVTSgMBERyUlhMoaGpMJERGQsCpMxNNZHq6h/aDjmSkREapfCZAzpLRMdMxERyW3MMDGzW82s28w2ZLTNMrO1ZrYpPM8M7WZmN5hZl5k9bWYLM+ZZHvpvMrPlGe3vNbNnwjw3mJkVO0YljBwz0anBIiI5FbJlcjuwdFTbSuABd18APBBeA1wALAiPFcBNEAUDcDXwfuAs4Op0OIQ+KzLmW1rMGJUycjbXoMJERCSXMcPE3R8GdoxqXgasCtOrgIsy2u/wyKPADDM7FlgCrHX3He6+E1gLLA3vTXP3R9zdgTtGLWs8Y1SEtkxERMZW7DGTo919O0B4Piq0zwa2ZPTbGtrytW/N0l7MGBXRqFODRUTGVO4D8JalzYtoL2aMQzuarTCzTjPr7OnpGWOx2aXDRGdziYjkVmyYvJHetRSeu0P7VmBuRr85wLYx2udkaS9mjEO4+83u3uHuHW1tbeP6AdP0pUURkbEVGyargfQZWcuBezLaLwlnXC0CdoddVGuA881sZjjwfj6wJry318wWhbO4Lhm1rPGMURHpA/AKExGR3OrG6mBmPwXOAY40s61EZ2VdB9xlZpcBrwKfDt3vBS4EuoBe4FIAd99hZt8C1oV+17h7+qD+54jOGGsG7gsPxjtGpTTU6XsmIiJjGTNM3P0zOd5anKWvA5fnWM6twK1Z2juBM7K0vzXeMSpBu7lERMamb8CPQQfgRUTGpjAZQ13CMNOWiYhIPgqTMZgZ7rBh2564SxERqVkKkwI9+EL32J1ERCYphUmB5rdNibsEEZGaNebZXAKnHHME75jVEncZIiI1S2FSgNf39NE3qLO5RERyUZgUYFfvILt6B+MuQ0SkZumYiYiIlExhUoCPv+s42lt1zEREJBeFSQHqkwkGh8e6Mr6IyOSlMClAQ53pTosiInkoTArwx1d20bO3n1RKWyciItkoTAqw8Y29AOwbGIq5EhGR2qQwKcB//OA8APoHtatLRCQbhUkBTjl2GoC+uCgikoPCpADN9dGte99WmIiIZKUwKUBTfbSa3h5QmIiIZKMwKYC2TERE8lOYFKCpQWEiIpKPwqQA6S2TPu3mEhHJSmFSAO3mEhHJT2FSgGbt5hIRyUthUoCm9JaJdnOJiGSlMCnAyDETbZmIiGSlMClAQ12C+qSxX1smIiJZKUwKNKWxjn19utCjiEg2CpMCTW2sY3+/wkREJBuFSYGmNtaxT2EiIpKVwqRAUxQmIiI5lRQmZvZlM3vWzDaY2U/NrMnM5pnZY2a2ycx+ZmYNoW9jeN0V3m/PWM6VoX2jmS3JaF8a2rrMbGVGe9YxKkm7uUREcis6TMxsNvAPQIe7nwEkgYuBbwPfd/cFwE7gsjDLZcBOdz8R+H7oh5mdFuY7HVgK/MDMkmaWBG4ELgBOAz4T+pJnjIrRbi4RkdxK3c1VBzSbWR3QAmwHzgXuDu+vAi4K08vCa8L7i83MQvud7t7v7puBLuCs8Ohy95fcfQC4E1gW5sk1RsVMaUwqTEREcig6TNz9NeCfgVeJQmQ3sB7Y5e7pT92twOwwPRvYEuYdCv1bM9tHzZOrvTXPGAcxsxVm1mlmnT09PcX+qABMbaxnf7++ZyIikk0pu7lmEm1VzAOOA6YQ7ZIazdOz5HivXO2HNrrf7O4d7t7R1taWrUvBpjYm2T8wRCqVdSgRkUmtlN1cfwFsdvcedx8EfgH8GTAj7PYCmANsC9NbgbkA4f3pwI7M9lHz5Gp/M88YFdPUkMQdBoZTlR5KRGTCKSVMXgUWmVlLOI6xGHgOeAj4VOizHLgnTK8OrwnvP+juHtovDmd7zQMWAI8D64AF4cytBqKD9KvDPLnGqJiGZLSq+ocUJiIio5VyzOQxooPgfwSeCcu6Gfg6cIWZdREd37glzHIL0BrarwBWhuU8C9xFFET3A5e7+3A4JvIFYA3wPHBX6EueMSqmoS5aVYPaMhEROUTd2F1yc/ergatHNb9EdCbW6L59wKdzLOda4Nos7fcC92ZpzzpGJaW3TAa0ZSIicgh9A75Ag+HA++63B2OuRESk9ihMCvSzda8CsOoPL8dbiIhIDVKYFOhrS04B4AMntMZciYhI7VGYFOj41hYAhob1PRMRkdEUJgVqaYjOVegd0CVVRERGU5gUaEpjdB943bpXRORQCpMCNdcnMUOXoRcRyUJhUiAzY0pDnS72KCKShcJkHJIJ4639/XGXISJScxQm47D77UHuebLi15QUEZlwFCYiIlIyhck4nDF7Gq1TKn67eRGRCUdhMg5zZ7bQVJ+MuwwRkZqjMBmH57fv4bVdb8ddhohIzVGYjMP8tqkARPfnEhGRNIXJODz4QjcAv+96K+ZKRERqi8KkCN17++IuQUSkpihMxuG46U3AgVv4iohIRJ+K43DtX70TgCOnNsZciYhIbVGYjENzOC04ldIBeBGRTAqTcUgmDABliYjIwRQm4xCyhD19g/EWIiJSYxQm47D5zV4AvnLXUzFXIiJSWxQmRXh7UPc0ERHJpDAZh2Zdl0tEJCuFyTgsPeOYuEsQEalJdXEXMJEkE8afndDKwFAq7lJERGqKtkzGqaUhSe+AjpmIiGRSmIxTc0OdDsCLiIxSUpiY2Qwzu9vMXjCz583sA2Y2y8zWmtmm8Dwz9DUzu8HMuszsaTNbmLGc5aH/JjNbntH+XjN7Jsxzg5lZaM86RjUMDqXY/Ob+ag0nIjIhlLpl8i/A/e5+CvAu4HlgJfCAuy8AHgivAS4AFoTHCuAmiIIBuBp4P3AWcHVGONwU+qbnWxrac41Rcfc/+zqAbpIlIpKh6DAxs2nAh4FbANx9wN13AcuAVaHbKuCiML0MuMMjjwIzzOxYYAmw1t13uPtOYC2wNLw3zd0f8ehuVHeMWla2MapmUAfhRURGlLJlMh/oAW4zsyfM7EdmNgU42t23A4Tno0L/2cCWjPm3hrZ87VuztJNnjKpJmFV7SBGRmlVKmNQBC4Gb3P09wH7y727K9unrRbQXzMxWmFmnmXX29PSMZ9ac3jV3BgC/fbG7LMsTETkclBImW4Gt7v5YeH03Ubi8EXZREZ67M/rPzZh/DrBtjPY5WdrJM8ZB3P1md+9w9462traifsjR/uHcEwE4bnpzWZYnInI4KDpM3P11YIuZnRyaFgPPAauB9BlZy4F7wvRq4JJwVtciYHfYRbUGON/MZoYD7+cDa8J7e81sUTiL65JRy8o2RsXNmdkCQN+QTg8WEUkr9Rvwfw/8xMwagJeAS4kC6i4zuwx4Ffh06HsvcCHQBfSGvrj7DjP7FrAu9LvG3XeE6c8BtwPNwH3hAXBdjjEqbkpjdH2u3n6FiYhIWklh4u5PAh1Z3lqcpa8Dl+dYzq3ArVnaO4EzsrS/lW2MapjaGK2yff1DcQwvIlKT9A34cWpuiLZMNmzbHXMlIiK1Q2EyTg3JaJX94o+vxVyJiEjtUJiMk+n7JSIih1CYiIhIyRQmRVj27uM4vrUl7jJERGqGwqQI9ckEr7zVG3cZIiI1Q2FShLvXR5cM29U7EHMlIiK1QWFSgr19+q6JiAgoTIrSHo6XbNmhXV0iIqAwKcpxM6KLPH5v7YsxVyIiUhsUJkX4yEnRFYgXHD015kpERGqDwqQIn1gY3aPr9OOmx1yJiEhtUJgUoaUhuthj74AOwIuIgMKkKM314TL0A7oMvYgIKEyKkkxE1+e6/v9uirkSEZHaoDAREZGSKUxERKRkCpMSRTeQFBGZ3BQmJRoYTsVdgohI7BQmRWqqj1bd/Rtej7kSEZH4KUyK1DcYbZFc9csNMVciIhI/hUmRLvnA8QCc0DYl5kpEROKnMCnSf1pyMgAfO/O4mCsREYmfwqRIdYlo1Q2ldDaXiIjCpEjpb8GndGqwiIjCpFh1IUx++cRrMVciIhI/hUmREiFMurr3xVyJiEj8FCYiIlIyhUkJ3tc+E9AlVURESg4TM0ua2RNm9qvwep6ZPWZmm8zsZ2bWENobw+uu8H57xjKuDO0bzWxJRvvS0NZlZisz2rOOUW2b3+wNz/vjGF5EpGaUY8vki8DzGa+/DXzf3RcAO4HLQvtlwE53PxH4fuiHmZ0GXAycDiwFfhACKgncCFwAnAZ8JvTNN0ZV/ePHTwdgZ+9gHMOLiNSMksLEzOYAHwV+FF4bcC5wd+iyCrgoTC8LrwnvLw79lwF3unu/u28GuoCzwqPL3V9y9wHgTmDZGGNU1eyZzQDs6h2IY3gRkZpR6pbJ9cDXgPSlc1uBXe6evjn6VmB2mJ4NbAEI7+8O/UfaR82Tqz3fGFU1s6Ue0JaJiEjRYWJmHwO63X19ZnOWrj7Ge+Vqz1bjCjPrNLPOnp6ebF1KMqMlOlTz1Z8/VfZli4hMJKVsmZwNfNzMXibaBXUu0ZbKDDOrC33mANvC9FZgLkB4fzqwI7N91Dy52t/MM8ZB3P1md+9w9462trbif9IcpjXVjd1JRGQSKDpM3P1Kd5/j7u1EB9AfdPe/AR4CPhW6LQfuCdOrw2vC+w96dE7tauDicLbXPGAB8DiwDlgQztxqCGOsDvPkGqOqosM3IiJSie+ZfB24wsy6iI5v3BLabwFaQ/sVwEoAd38WuAt4DrgfuNzdh8MxkS8Aa4jOFrsr9M03RtX9+cnRFo++ayIik5lNlg/Bjo4O7+zsLPty21f+GoBHr1zMMdObyr58EZE4mdl6d+8Yq5++AV+iTy6cA8DAkO4FLyKTl8KkREdPawTgjkdejrUOEZE4KUxKtG3X2wDc81TWE8pERCYFhUmJ/vJd0W17e/b2x1yJiEh8FCYlOvvEI+MuQUQkdgqTEjXVJ+MuQUQkdgoTEREpmcKkDD4wvxWAja/vjbkSEZF4KEzKIBHW4pLrH463EBGRmChMyuAds6bEXYKISKwUJmVw1UdPjbsEEZFYKUzKYGqjLkUvIpObwkREREqmMCmzVGpyXIVZRCSTwqRM0hd8/OUTr8VciYhI9SlMyuSNPdG1uR7a2B1zJSIi1acwKZNzwh0X57dNjbkSEZHqU5iUyXc+eSYAdz7+asyViIhUn8KkTGa0NADQvbefvsHhmKsREakuhUmZNNQdWJU3PtQVYyUiItWnMKmA//GgwkREJheFiYiIlExhUka3/d374i5BRCQWCpMyWhTuayIiMtkoTMqoueHALXz39w/FWImISHUpTCrkEz/4fdwliIhUjcKkzBbNnwXAi2/si7kSEZHqUZiU2e2XnjUyvat3IMZKRESqR2FSZk31B46bvLVfYSIik4PCpIKuvufZuEsQEamKosPEzOaa2UNm9ryZPWtmXwzts8xsrZltCs8zQ7uZ2Q1m1mVmT5vZwoxlLQ/9N5nZ8oz295rZM2GeG8zM8o1RK1Z8eD4Av+t6M+ZKRESqo5QtkyHgK+5+KrAIuNzMTgNWAg+4+wLggfAa4AJgQXisAG6CKBiAq4H3A2cBV2eEw02hb3q+paE91xg14YrzToq7BBGRqio6TNx9u7v/MUzvBZ4HZgPLgFWh2yrgojC9DLjDI48CM8zsWGAJsNbdd7j7TmAtsDS8N83dH3F3B+4YtaxsY9SEpvokzeHYyZW/eDrmakREKq8sx0zMrB14D/AYcLS7b4cocICjQrfZwJaM2baGtnztW7O0k2eM0XWtMLNOM+vs6ekp9scryjXLTgfgp49vGaOniMjEV3KYmNlU4N+AL7n7nnxds7R5Ee0Fc/eb3b3D3Tva2trGM2vJPt0xd2R6ODWuskVEJpySwsTM6omC5Cfu/ovQ/EbYRUV4Tt8UfSswN2P2OcC2MdrnZGnPN0ZN+usfPhp3CSIiFVXK2VwG3AI87+7fy3hrNZA+I2s5cE9G+yXhrK5FwO6wi2oNcL6ZzQwH3s8H1oT39prZojDWJaOWlW2MmvKJ90R75R7bvCPmSkREKquULZOzgb8FzjWzJ8PjQuA64Dwz2wScF14D3Au8BHQBPwQ+D+DuO4BvAevC45rQBvA54Edhnj8B94X2XGPUlO9+6syR6Q2v7Y6xEhGRyrLoRKnDX0dHh3d2dlZ93JOuuo+B4RQAL1/30aqPLyJSCjNb7+4dY/XTN+Ar7Hcr/3xkuntPX4yViIhUjsKkwo46omlk+qx/eoDJsiUoIpOLwqQK7rn87JHpHz/6SoyViIhUhsKkCk459oiR6f+iiz+KyGFIYVIFjXVJvvfv3jXy+qGNNf21GBGRcVOYVMlfLTzw/ctLb1sXYyUiIuWnMKmib110xsj0Lb/bHGMlIiLlpTCpor9ddDzJRHTJsW/96jk2vr435opERMpDYVJlXddeMDK95PqHGQxfaBQRmcgUJlVmZiw+5cAV8xdcdZ++eyIiE57CJAY3/s1CPhtu7Qsw78p7Y6xGRKR0CpMYNNUnufLCU7n07PaRtvaVv6Z/aDi+okRESqAwidHVf3k6X1t68sjrk//z/WzZ0RtjRSIixVGYxOzz55zIb796zsjrD33nIda/ovufiMjEojCpAe1HTuHRKxePvP7kTY/QvvLX7O0bjLEqEZHCKUxqxDHTm1jzpQ8f1PbOb/6G3+rSKyIyAShMasjJxxzB5v92IR9acORI29/dto72lb/msZfeirEyEZH8dKfFGpVKOfO/cegpw49/YzFHTWvKMoeISPkVeqdFhUmN+8Of3uSvf/jYIe1nzpnO7ZeexawpDTFUJSKThcJklIkaJmnrX9nJJ2/6Q9b3LvvgPL5x4akj1/0SESkXhckoEz1M0vb2DfLOb/4m5/v/vmMul31oHicdfUTOPiIihVKYjHK4hEmmru69/MX3Hh6z3wNf+QgntE2tQkUicrhRmIxyOIZJprf29fPgC93ct+F1Hnwh9+nE7a0tTGms4+/PPZElpx+DmXaNiUhuCpNRDvcwGW1gKMWPH32Fb9//Av1DhV3m/h2zWvjyeQtYcvoxtDTUVbhCEZkIFCajTLYwyeWa//Mcd657ld6B8V9UcnpzPd/91JksPH4mUxvraKpPVqBCEaklCpNRFCa57ekb5KEXuln95DYeyLOLbCzLP3A8qx55hZOOnsrpx03n3FOO4pnXdnPp2e0YxhFNdTTXJzFDu9dEJgiFySgKk+L0DQ7Tvaef+zZsZ93LO5kzs5mdvQM8/GIPDXUJ3tjTX9Ryj29t4ZW3eln4jhnMbGmgqT5JY32CY6Y1Ma25nsGhFImEMaOlntYpjWzZ0ctxM5o5aloje/sGmd7cwFFHNNLSkKS5IUldIoHjNCQTCiqRMio0TLRjXPJqqk/yjtYWPvuRE/jsR3L3c3dSDj17+3l1Ry9v7etn2+4+rv31c6y84BRu+/3LnHrsNF7Yvodtu/s4eloTr7zVS+/AMH2DffQNDbOvb4juvcWFU6a6hDG9uZ7mhiQDQymmNddTn0zQkDSa0ltGGMMpZ8vOXhbNbyWZMOoSlvGcoC5p2dvTr5PZ2+uTxuCwYwb1yQRJM8wgYdE8dYkEKY/ex4HQL5VyGuuTGDA4nKI+mSAR5k0mbKTuhBHNOzJtGIz0BUgkorb0uKH7yLRZmBeDsPyU+8h7dYlo/aTHdo+W5R49Uu4jNSXNSISB033SdaSDPf1Hq4L+8KUtE6kpwymnf2iYtweG2dc/RM/efsyMnr194UPK6NnXz+7eAaY2Rn8L9Q4OMzjkdO/tw4k+zN4eGCJhxnPb93B8awuDw87+/iEcwMFx9vUP0zswBMDQsDOUSjGccoZSzvBweE5F7anJ8d+krNJB5u440XQ6/FIhqBIjYQOJjCsFGobjI+F5YJkhGAMnBOHoX1CUkRDeT5ilc3tkvmjcqLa6RAJwEmYMpfygYD7wEenhj4fESDgeWE66x4E6EjmCM1d7Pul1lTBIhTBPWPQHgDvUJQ9dZmbLl887iWXvnj3ucaOxD/MtEzNbCvwLkAR+5O7XxVySlEEyYbQ01NHSUEfr1EaOb50Sd0lAdK20YfdRYZMRPilncPjA677BYaY01jEwlMIdhlIpHEb6uYetDWBw2Ec+HAaGh8OHQ4LBoWieoeHobLxUCEF3Qmimp51U6tC2dL+UZ5knfIimPL1V6eGDP5p3cNipS9hIzYR5E+GD2YCh0D4cfn4LH3QJi9ZXOtiB8J6PfBAmw4d7OgTMjOFUCgvhAxz0YQkHPrhTGX8AR1uYqbAlFoIJzwiAqL50MKUylu0hPAi/g/TPWJc0olXuB0YJn8zDw9G/g6j1wM+WriX9Or0eD/o35NE8w+4cHIlji9ZDtP7SW4TD6dAbtU4yK09rndI4rvGKMSHDxMySwI3AecBWYJ2ZrXb35+KtTA5XiYSRwNAJbCLZTdRL0J8FdLn7S+4+ANwJLIu5JhGRSWuihslsYEvG662hTUREYjBRwyTbDsdDDpGa2Qoz6zSzzp6eniqUJSIyOU3UMNkKzM14PQfYNrqTu9/s7h3u3tHW1la14kREJpuJGibrgAVmNs/MGoCLgdUx1yQiMmlNyLO53H3IzL4ArCE6NfhWd3825rJERCatCRkmAO5+L3DoTdJFRKTqJupuLhERqSGT5nIqZtYDvFLk7EcCb5axnHJRXeNTq3VB7damusbncKzreHcf8wymSRMmpTCzzkKuTVNtqmt8arUuqN3aVNf4TOa6tJtLRERKpjAREZGSKUwKc3PcBeSgusanVuuC2q1NdY3PpK1Lx0xERKRk2jIREZGSKUzGYGZLzWyjmXWZ2coYxn/ZzJ4xsyfNrDO0zTKztWa2KTzPDO1mZjeEWp82s4VlrONWM+s2sw0ZbeOuw8yWh/6bzGx5her6ppm9FtbZk2Z2YcZ7V4a6NprZkoz2sv6ezWyumT1kZs+b2bNm9sXQHus6y1NXrOvMzJrM7HEzeyrU9Y+hfZ6ZPRZ+9p+FyydhZo3hdVd4v32sestc1+1mtjljfb07tFft335YZtLMnjCzX4XX8a0vD3fw0uPQB9GlWv4EzAcagKeA06pcw8vAkaPavgOsDNMrgW+H6QuB+4iuqrwIeKyMdXwYWAhsKLYOYBbwUnieGaZnVqCubwJfzdL3tPA7bATmhd9tshK/Z+BYYGGYPgJ4MYwf6zrLU1es6yz83FPDdD3wWFgPdwEXh/Z/BT4Xpj8P/GuYvhj4Wb56K1DX7cCnsvSv2r/9sNwrgP8N/Cq8jm19acskv1q9CdcyYFWYXgVclNF+h0ceBWaY2bHlGNDdHwZ2lFjHEmCtu+9w953AWmBpBerKZRlwp7v3u/tmoIvod1z237O7b3f3P4bpvcDzRPfciXWd5akrl6qss/Bz7wsv68PDgXOBu0P76PWVXo93A4vNzPLUW+66cqnav30zmwN8FPhReG3EuL4UJvnVwk24HPiNma03sxWh7Wh33w7RhwNwVGivdr3jraOa9X0h7Ga4Nb0rKa66wi6F9xD9VVsz62xUXRDzOgu7bJ4Euok+bP8E7HL3oSxjjIwf3t8NtFajLndPr69rw/r6vpmlb7Jezd/j9cDXgFR43UqM60thkl9BN+GqsLPdfSFwAXC5mX04T99aqBdy11Gt+m4CTgDeDWwH/ntcdZnZVODfgC+5+558XatZW5a6Yl9n7j7s7u8muj/RWcCpecaIrS4zOwO4EjgFeB/RrquvV7MuM/sY0O3u6zOb84xR8boUJvkVdBOuSnL3beG5G/gl0X+yN9K7r8Jzd+he7XrHW0dV6nP3N8IHQAr4IQc226tal5nVE31g/8TdfxGaY19n2eqqlXUWatkF/JbomMMMM0tf3TxzjJHxw/vTiXZ3VqOupWF3obt7P3Ab1V9fZwMfN7OXiXYxnku0pRLf+irl4M/h/iC6RP9LRAem0gcZT6/i+FOAIzKm/0C0n/W7HHwQ9zth+qMcfPDv8TLX087BB7rHVQfRX3CbiQ5AzgzTsypQ17EZ018m2icMcDoHH2x8iehActl/z+FnvwO4flR7rOssT12xrjOgDZgRppuB/wd8DPg5Bx9Q/nyYvpyDDyjfla/eCtR1bMb6vB64Lo5/+2HZ53DgAHxs66tsHzSH64Po7IwXifbfXlXlseeHX/RTwLPp8Yn2dT4AbArPs0K7ATeGWp8BOspYy0+Jdn8MEv01c1kxdQD/geggXxdwaYXq+l9h3KeJ7sCZ+UF5VahrI3BBpX7PwAeJdhc8DTwZHhfGvc7y1BXrOgPOBJ4I428A/mvG/4HHw8/+c6AxtDeF113h/flj1Vvmuh4M62sD8GMOnPFVtX/7Gcs9hwNhEtv60jfgRUSkZDpmIiIiJVOYiIhIyRQmIiJSMoWJiIiUTGEiIiIlU5iIiEjJFCYiIlIyhYmIiJTs/wMvDmTM+7KRugAAAABJRU5ErkJggg==\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",
"# get a sample and detach\n",
"#gplvm.X = gplvm.X.detach()\n",
"# or use the prediction mean\n",
"gplvm.X = gplvm.X_loc"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"del gplvm._priors['X']"
]
},
{
"cell_type": "code",
"execution_count": 12,
"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": [
"class Predict(gp.parameterized.Parameterized):\n",
" def __init__(self, y_new, gplvm):\n",
" super(Predict, self).__init__()\n",
" self.y_new = y_new\n",
" self.gplvm = gplvm\n",
" self.X_new = Parameter(torch.zeros(y_new.shape[1], gplvm.Xu.shape[1]))\n",
"\n",
" def model(self):\n",
" # conditional on past data\n",
" y_new_loc, y_new_var = self.gplvm(self.X_new)\n",
" # fix a bug in Pyro code, which returns incorrect shape for variance of sgpr\n",
" y_new_var = y_new_var[0, 0, :]\n",
" pyro.sample(\"y_new\", dist.Normal(y_new_loc, y_new_var.sqrt()).independent(2), obs=self.y_new)\n",
"\n",
" def guide(self):\n",
" pass \n",
"\n",
"\n",
"y_new = y\n",
"pred_module = Predict(y_new, gplvm)\n",
"losses = gp.util.train(pred_module, num_steps=2000)\n",
"# let's plot the loss curve after 2000 steps of training\n",
"plt.plot(losses)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"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 = pred_module.X_new.detach().cpu().numpy()\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 (test)",
"language": "python",
"name": "test"
},
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.