Skip to content

Instantly share code, notes, and snippets.

@fehiepsi
Last active April 13, 2018 08:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fehiepsi/81277c39918ad4cd054157faed8b3de2 to your computer and use it in GitHub Desktop.
Save fehiepsi/81277c39918ad4cd054157faed8b3de2 to your computer and use it in GitHub Desktop.
updated after avoiding call model/guide two times
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# GPLVM"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"from sklearn import datasets\n",
"import torch\n",
"\n",
"import pyro\n",
"import pyro.contrib.gp as gp\n",
"import pyro.optim as optim\n",
"\n",
"pyro.set_rng_seed(123)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"iris = datasets.load_iris()\n",
"X = torch.tensor(iris.data).float().t()\n",
"y = iris.target\n",
"target_names = iris.target_names"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### define model"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"X_r_loc = torch.zeros(150, 2) # project to 2D\n",
"Xu = torch.zeros(20, 2) # 20 inducing points\n",
"kernel = gp.kernels.RBF(input_dim=2, lengthscale=torch.ones(2))\n",
"gpmodel = gp.models.SparseGPRegression(X_r_loc, X, kernel, Xu)\n",
"gpmodel.fix_param(\"noise\", torch.tensor(0.01))\n",
"gplvm = gp.models.GPLVM(gpmodel)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### train and visualize"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0bf87b6e80>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"losses = gplvm.optimize(optim.Adam({\"lr\": 0.01}))\n",
"plt.plot(losses);"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"X_r = gplvm.get_param(\"X_loc\").detach().numpy()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f0bed186e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# http://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html\n",
"plt.figure()\n",
"colors = ['navy', 'turquoise', 'darkorange']\n",
"lw = 2\n",
"\n",
"for color, i, target_name in zip(colors, [0, 1, 2], target_names):\n",
" plt.scatter(X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=.8, lw=lw,\n",
" label=target_name)\n",
"plt.legend(loc='best', shadow=False, scatterpoints=1)\n",
"plt.title('GPLVM of IRIS dataset');"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python (pyro)",
"language": "python",
"name": "pyro"
},
"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.5.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment