Master-Project/Notebooks/31_gpflow_first_test.ipynb
2021-07-30 16:21:14 +02:00

369 lines
72 KiB
Text

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Base math/data packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Gaussian Process Modeling packages"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import gpflow\n",
"import tensorflow as tf"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from gpflow.utilities import print_summary"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plotting package"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notebook output parameters"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"plt.rcParams[\"figure.figsize\"] = (12, 6)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"#tf.config.set_visible_devices([], 'GPU')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Basic Gaussian Process regression model with `GPflow`"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"size = 500"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"X = np.linspace(0, 25, num = size)\n",
"Y = 5 * X + 3 * np.sin(X) * np.exp(0.1*X)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"df_func = pd.DataFrame({\n",
" 'X': X,\n",
" 'Y': Y\n",
"})"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Take n random samples from the function"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"n_sampl = 25"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"df_sampled = df_func.sample(n_sampl)\n",
"X_sampled = df_sampled['X'].to_numpy().reshape(-1, 1)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"Y_sampled = df_sampled['Y'].to_numpy().reshape(-1, 1)\n",
"\n",
"# Add noise to the output\n",
"mean, var = 0, 0.5\n",
"noise = np.random.normal(mean, var, size = Y_sampled.shape)\n",
"\n",
"Y_sampled = Y_sampled + noise"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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G9+Hq0Yk0yJCp0tERESkqahp+ZH1O8t4/MuNzN5URMe4KB65qD+XntClblUJEREREWlKKsZ+ILekkidnbuajlTtoFRXOb87tzbWjUogKVyEWERERaS4qxg6qqvXy/JxMnp2diQFuPTmVW09OJS463OloIiIiIiFHxdghszYU8PB/1pFbsp/zBnbkt+P70DFOF9WJiIiIOEXFuJnlllTyh/+s4+sNhfRo15JpN41gdI+2TscSERERCXkqxs3E57NMXZjN419swhh44JzeXD+6GxHuMKejiYiIiAgqxs0is2gf9723moycPYzrlcijFw3QWsQiIiIifkbFuAl5vD5emr+NJ2duJjrcxZOXD+KiIZ0xRrvViYiIiPgbFeMmklNcwXNvvElC4RJuTBnN9VdeQbvYKKdjiYiIiMhhqBg3Mmst7y7L46MZH/Jy2J+IDPdgCmZg9vaB2OFOxxMRERGRw9CVX41oT0UNt09bzr3vreb8uEyijJcwfBhvDWTPczqeiIiIiByBRowbyfwtu7n73ZWUVNRw/zm9uTylLeb1t8FbA64ISBnrdEQREREROQIV4waq9fr425ebmDI3i9TEGF6ePIz+neOAVJg848BIccpYSNI0ChERERF/pmLcALtKq7hj+nIycvZw1YhkHhzfl+gI13+fkDRchVhEREQkQKgY19N3W3dz55sr2F/r5R9XDuaCwZ2djiQiIiIiDaBifJx8Pssz327lya83k5rYkrevHkqPdrFOxxIRERGRBlIxPg57Kmq4652VzN5UxAWDO/HoRQOIidT/hSIiIiLBQK3uGK3YvoefT1vO7n01/PnC/kwakawd7ERERESCiIrxUVhrmbogm0c+20D7VlG8d9soBnaJdzqWiIiIiDQyFeMj2Fft4b73V/Pp6nxO692OJy4fRHyLCKdjiYiIiEgTUDE+jE27yrlt2jKyd1dw79m9uPWkVMLCNHVCREREJFipGB/CB8vz+M2Ha2gZGc60m0YyKrWN05FEREREpImpGB+kqtbLH/6znjeXbGdEtwSenjiEdq2inI4lIiIiIs1AxbjO9uJKbpu2jHU7y7htXCp3n9ETtyvM6VgiIiIi0kyarBgbY84G/gG4gJestY811bEaJHcJW5Z8zh/WJJBLT166Np3T+7Z3OpWIiIiINLMmKcbGGBfwDHAGkAcsNcbMsNaub4rj1ZcnZxF26gS6eWt52bjZe9n7tFcpFhEREQlJTTVXYDiw1VqbZa2tAd4CLmiiY9XL3soa3nn3TYy3FrfxEWG8tC9Z6nQsEREREXFIUxXjzkDuQd/n1d33A2PMLcaYDGNMRlFRURPFOLyYSDdbWgwGVwQYF8YVASljmz2HiIiIiPiHpppjfKgFf+2PvrF2CjAFID093R7i+U0q3BXG72+7DpPXD7LnHSjFScObO4aIiIiI+ImmKsZ5QNJB33cBdjbRserNGHOgDKsQi4iIiIS8pppKsRRIM8Z0M8ZEAFcCM5roWCIiIiIiDdYkI8bWWo8x5g7gSw4s1/aKtXZdUxxLRERERKQxNNk6xtbaz4DPmur9RUREREQak7Z2ExERERFBxVhEREREBFAxFhEREREBVIxFRERERAAVYxERERERQMVYRERERARQMRYRERERAVSMRUREREQAFWMREREREQCMtdbpDBhjioAchw7fFtjt0LGl+eg8Bz+d49Cg8xwadJ6Dn5PnuKu1NvFQD/hFMXaSMSbDWpvudA5pWjrPwU/nODToPIcGnefg56/nWFMpRERERERQMRYRERERAVSMAaY4HUCahc5z8NM5Dg06z6FB5zn4+eU5Dvk5xiIiIiIioBFjEREREREghIuxMeZsY8wmY8xWY8z9TueRpmGMyTbGrDHGrDTGZDidRxqHMeYVY0yhMWbtQfclGGNmGmO21N22djKjNNxhzvPDxpgddZ/plcaYc53MKA1jjEkyxnxrjNlgjFlnjPll3f36PAeRI5xnv/s8h+RUCmOMC9gMnAHkAUuBidba9Y4Gk0ZnjMkG0q21Wg8ziBhjTgL2Aa9Za/vX3fc4UGKtfazul93W1tr7nMwpDXOY8/wwsM9a+3cns0njMMZ0BDpaa5cbY2KBZcCFwHXo8xw0jnCeL8fPPs+hOmI8HNhqrc2y1tYAbwEXOJxJRI6RtXYuUPKTuy8AptZ9PZUDP3QlgB3mPEsQsdbmW2uX131dDmwAOqPPc1A5wnn2O6FajDsDuQd9n4efniBpMAt8ZYxZZoy5xekw0qTaW2vz4cAPYaCdw3mk6dxhjFldN9VCf2IPEsaYFGAIsBh9noPWT84z+NnnOVSLsTnEfaE3pyQ0jLbWDgXOAX5e96dZEQlczwGpwGAgH3jC0TTSKIwxLYH3gf9nrS1zOo80jUOcZ7/7PIdqMc4Dkg76vguw06Es0oSstTvrbguBDzkwjUaCU0HdPLbv57MVOpxHmoC1tsBa67XW+oAX0Wc64BljwjlQlqZZaz+ou1uf5yBzqPPsj5/nUC3GS4E0Y0w3Y0wEcCUww+FM0siMMTF1k/wxxsQAZwJrj/wqCWAzgMl1X08GPnYwizSR78tSnYvQZzqgGWMM8DKwwVr75EEP6fMcRA53nv3x8xySq1IA1C0J8n+AC3jFWvuIs4mksRljunNglBjADUzXeQ4Oxpg3gXFAW6AAeAj4CHgHSAa2A5dZa3XhVgA7zHkex4E/u1ogG/jZ93NRJfAYY8YA84A1gK/u7t9wYP6pPs9B4gjneSJ+9nkO2WIsIiIiInKwUJ1KISIiIiLyIyrGIiIiIiKoGIuIiIiIACrGIiIiIiKAirGIiIiICKBiLCIiIiICqBiLiIiIiAAqxiIiIiIiAPx/U+zyDiv8grYAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"plt.plot(X, Y)\n",
"plt.plot(X_sampled, Y_sampled, '.')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Gaussian Process regression"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"k = gpflow.kernels.SquaredExponential() + gpflow.kernels.Linear()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"╒═════════════════════════════╤═══════════╤═════════════╤═════════╤═════════════╤═════════╤═════════╤═════════╕\n",
"│ name │ class │ transform │ prior │ trainable │ shape │ dtype │ value │\n",
"╞═════════════════════════════╪═══════════╪═════════════╪═════════╪═════════════╪═════════╪═════════╪═════════╡\n",
"│ Sum.kernels[0].variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 1 │\n",
"├─────────────────────────────┼───────────┼─────────────┼─────────┼─────────────┼─────────┼─────────┼─────────┤\n",
"│ Sum.kernels[0].lengthscales │ Parameter │ Softplus │ │ True │ () │ float64 │ 1 │\n",
"├─────────────────────────────┼───────────┼─────────────┼─────────┼─────────────┼─────────┼─────────┼─────────┤\n",
"│ Sum.kernels[1].variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 1 │\n",
"╘═════════════════════════════╧═══════════╧═════════════╧═════════╧═════════════╧═════════╧═════════╧═════════╛\n"
]
}
],
"source": [
"print_summary(k)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"╒════════════════════════════════════╤═══════════╤══════════════════╤═════════╤═════════════╤═════════╤═════════╤═════════╕\n",
"│ name │ class │ transform │ prior │ trainable │ shape │ dtype │ value │\n",
"╞════════════════════════════════════╪═══════════╪══════════════════╪═════════╪═════════════╪═════════╪═════════╪═════════╡\n",
"│ GPR.kernel.kernels[0].variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 1 │\n",
"├────────────────────────────────────┼───────────┼──────────────────┼─────────┼─────────────┼─────────┼─────────┼─────────┤\n",
"│ GPR.kernel.kernels[0].lengthscales │ Parameter │ Softplus │ │ True │ () │ float64 │ 1 │\n",
"├────────────────────────────────────┼───────────┼──────────────────┼─────────┼─────────────┼─────────┼─────────┼─────────┤\n",
"│ GPR.kernel.kernels[1].variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 1 │\n",
"├────────────────────────────────────┼───────────┼──────────────────┼─────────┼─────────────┼─────────┼─────────┼─────────┤\n",
"│ GPR.likelihood.variance │ Parameter │ Softplus + Shift │ │ True │ () │ float64 │ 1 │\n",
"╘════════════════════════════════════╧═══════════╧══════════════════╧═════════╧═════════════╧═════════╧═════════╧═════════╛\n"
]
}
],
"source": [
"m = gpflow.models.GPR(\n",
" data = (X_sampled, Y_sampled), \n",
" kernel = k, \n",
" mean_function = None\n",
" )\n",
"print_summary(m)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"opt = gpflow.optimizers.Scipy()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"╒════════════════════════════════════╤═══════════╤══════════════════╤═════════╤═════════════╤═════════╤═════════╤════════════╕\n",
"│ name │ class │ transform │ prior │ trainable │ shape │ dtype │ value │\n",
"╞════════════════════════════════════╪═══════════╪══════════════════╪═════════╪═════════════╪═════════╪═════════╪════════════╡\n",
"│ GPR.kernel.kernels[0].variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 280.828 │\n",
"├────────────────────────────────────┼───────────┼──────────────────┼─────────┼─────────────┼─────────┼─────────┼────────────┤\n",
"│ GPR.kernel.kernels[0].lengthscales │ Parameter │ Softplus │ │ True │ () │ float64 │ 1.96707 │\n",
"├────────────────────────────────────┼───────────┼──────────────────┼─────────┼─────────────┼─────────┼─────────┼────────────┤\n",
"│ GPR.kernel.kernels[1].variance │ Parameter │ Softplus │ │ True │ () │ float64 │ 22.1453 │\n",
"├────────────────────────────────────┼───────────┼──────────────────┼─────────┼─────────────┼─────────┼─────────┼────────────┤\n",
"│ GPR.likelihood.variance │ Parameter │ Softplus + Shift │ │ True │ () │ float64 │ 0.212818 │\n",
"╘════════════════════════════════════╧═══════════╧══════════════════╧═════════╧═════════════╧═════════╧═════════╧════════════╛\n"
]
}
],
"source": [
"opt_logs = opt.minimize(m.training_loss, m.trainable_variables, options=dict(maxiter=1000))\n",
"print_summary(m)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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IiIiIiL7dyxHwL0b+G9SI+DustZ+/0Dnlk+eZV94+TUqR+Udk1pERERERCD90y2w1j4JPHkw51bkBxSQRURERGTEOFY9yYfErQvzRERERGQEGREhWURERERkJFFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhlFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhlFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhlFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhlFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhlFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhlFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhlFIFhEREREZRiFZRERERGQYhWQRERERkWEUkkVEREREhjHW2nTXgDGmHagd/LAY6EhjOTLy6Dkhw+k5IcPpOSF70vNBhtvzOTHeWlvyTncYESF5T8aYldba+emuQ0YOPSdkOD0nZDg9J2RPej7IcIfznFC7hYiIiIjIMArJIiIiIiLDjMSQ/Kt0FyAjjp4TMpyeEzKcnhOyJz0fZLhDfk6MuJ5kEREREZF0G4krySIiIiIiaTViQrIx5ipjzFZjzA5jzDfTXY+knzGmxhizwRiz1hizMt31yPFnjLnLGNNmjNm4x7FCY8zfjDHbB98WpLNGOb4O8Jz4njGmcfC1Yq0x5t3prFGOL2PMWGPMMmPMZmPMJmPMlwaP67XiFPU2z4lDeq0YEe0Wxhg3sA24AmgAVgAfsNZWpbUwSStjTA0w31qrWZenKGPMRUAQuM9aO3vw2I+BLmvtDwd/oS6w1n4jnXXK8XOA58T3gKC19v+lszZJD2NMBVBhrV1tjMkBVgE3Arei14pT0ts8J27mEF4rRspK8gJgh7V2l7U2BjwE3JDmmkQkzay1LwFdww7fANw7+P69pF745BRxgOeEnMKstc3W2tWD7/cDm4HR6LXilPU2z4lDMlJC8migfo+PGziML0ZOOhZ41hizyhjz6XQXIyNGmbW2GVIvhEBpmuuRkeF2Y8z6wXYM/Vn9FGWMmQDMA95ErxXCPs8JOITXipESks1+jqW/D0TS7Xxr7RnA1cDiwT+ziogM9wtgMnA60Az8NK3VSFoYY7KBPwJfttb2pbseSb/9PCcO6bVipITkBmDsHh+PAZrSVIuMENbapsG3bcCfSbXliLQO9pvt7jtrS3M9kmbW2lZrbdJa6wC/Rq8VpxxjjJdUGLrfWvunwcN6rTiF7e85caivFSMlJK8AphpjJhpjfMAtwGNprknSyBiTNdhsjzEmC7gS2Pj295JTxGPAxwbf/xjwlzTWIiPA7iA06Cb0WnFKMcYY4LfAZmvtz/a4Sa8Vp6gDPScO9bViREy3ABgcw/HfgBu4y1r7/fRWJOlkjJlEavUYwAM8oOfEqccY8yBwCVAMtALfBR4FHgHGAXXAImutLuQ6RRzgOXEJqT+fWqAG+MzuXlQ5+RljLgBeBjYAzuDhfyLVg6rXilPQ2zwnPsAhvFaMmJAsIiIiIjJSjJR2CxERERGREUMhWURERERkGIVkEREREZFhFJJFRERERIZRSBYRERERGUYhWURERERkGIVkEREREZFhFJJFRERERIb5/15Hc8jifh81AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 864x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"## generate test points for prediction\n",
"xx = np.linspace(-1, 26, 100).reshape(100, 1) # test points must be of shape (N, D)\n",
"\n",
"## predict mean and variance of latent GP at test points\n",
"mean, var = m.predict_f(xx)\n",
"\n",
"## generate 10 samples from posterior\n",
"tf.random.set_seed(1) # for reproducibility\n",
"samples = m.predict_f_samples(xx, 10) # shape (10, 100, 1)\n",
"\n",
"## plot\n",
"plt.figure(figsize=(12, 6))\n",
"plt.plot(X_sampled, Y_sampled, \"kx\", mew=2)\n",
"plt.plot(xx, mean, \"C0\", lw=2)\n",
"plt.fill_between(\n",
" xx[:, 0],\n",
" mean[:, 0] - 1.96 * np.sqrt(var[:, 0]),\n",
" mean[:, 0] + 1.96 * np.sqrt(var[:, 0]),\n",
" color=\"C0\",\n",
" alpha=0.2,\n",
")\n",
"plt.plot(xx, samples[:, :, 0].numpy().T, \"C0\", linewidth=0.5)\n",
"#plt.plot(X, Y, color = 'darkorange', lw = 2)\n",
"_ = plt.xlim(-0.1, 25.1)"
]
}
],
"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.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}