From 2f69cd1899eb332c552cab067d474306d171a18f Mon Sep 17 00:00:00 2001 From: Neil Lawrence Date: Sun, 25 Oct 2026 18:26:27 +0000 Subject: [PATCH] Write Deep GP figures with mlai and fetch MNIST via LIAC ARFF. Lecture 11 smoke was failing without system latex because the PGM cells set usetex=True. Lecture 12 hits a pandas 3 TypeError in sklearn's default OpenML ARFF parser. Matches snippets PR 64. --- _lectures/12-deep-gps-II.html | 18 ++++++++++-------- _notebooks/11-deep-gps-I.ipynb | 27 +++++++++++++++++++-------- _notebooks/12-deep-gps-II.ipynb | 8 +++++--- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/_lectures/12-deep-gps-II.html b/_lectures/12-deep-gps-II.html index 96203ef..45ca99b 100644 --- a/_lectures/12-deep-gps-II.html +++ b/_lectures/12-deep-gps-II.html @@ -1007,7 +1007,7 @@

Subsample of the MNIST Data

The data is a modified version of a data set from the US National Institute of Standards and Technology (NIST.

First load in the MNIST data set from scikit learn. This can take a little while because it’s large to download.

from sklearn.datasets import fetch_openml
-
mnist = fetch_openml('mnist_784')
+
mnist = fetch_openml('mnist_784', version=1, as_frame=False, parser='liac-arff')

Sub-sample the dataset to make the training faster.

import numpy as np
np.random.seed(0)
@@ -1015,13 +1015,15 @@ 

Subsample of the MNIST Data

N_per_digit = 100 Y = [] labels = [] -for d in digits: - imgs = mnist['data'][mnist['target']==str(d)] - Y.append(imgs.loc[np.random.permutation(imgs.index)[:N_per_digit]]) - labels.append(np.ones(N_per_digit)*d) -Y = np.vstack(Y).astype(np.float64) -labels = np.hstack(labels) -Y /= 255
+data = np.asarray(mnist.data) +target = np.asarray(mnist.target).astype(str) +for d in digits: + imgs = data[target == str(d)] + Y.append(imgs[np.random.permutation(len(imgs))[:N_per_digit]]) + labels.append(np.ones(N_per_digit)*d) +Y = np.vstack(Y).astype(np.float64) +labels = np.hstack(labels) +Y /= 255

Now let’s visualise some examples from our subsampled dataset to get a sense of what the data looks like.

MNIST Digit Examples

diff --git a/_notebooks/11-deep-gps-I.ipynb b/_notebooks/11-deep-gps-I.ipynb index a32841f..29e6270 100644 --- a/_notebooks/11-deep-gps-I.ipynb +++ b/_notebooks/11-deep-gps-I.ipynb @@ -659,9 +659,10 @@ "outputs": [], "source": [ "from matplotlib import rc\n", + "from mlai import plot\n", + "import mlai\n", "\n", - "rc(\"font\", **{'family':'sans-serif','sans-serif':['Helvetica'],'size':30})\n", - "rc(\"text\", usetex=True)" + "rc(\"font\", **{'family':'sans-serif','sans-serif':['Helvetica'],'size':30})" ], "id": "b4899adc-c510-4ced-bf32-adf9da122d91" }, @@ -672,7 +673,9 @@ "outputs": [], "source": [ "pgm = plot.horizontal_chain(depth=5)\n", - "pgm.render().figure.savefig(\"./deepgp/deep-markov.svg\", transparent=True)" + "mlai.write_figure('deep-markov.svg',\n", + " figure=pgm.render().figure,\n", + " directory='./deepgp')" ], "id": "e1f06e27-f3e2-4ebc-92ce-67e9c5f3ab1a" }, @@ -699,8 +702,10 @@ "outputs": [], "source": [ "from matplotlib import rc\n", - "rc(\"font\", **{'family':'sans-serif','sans-serif':['Helvetica'], 'size':15})\n", - "rc(\"text\", usetex=True)" + "from mlai import plot\n", + "import mlai\n", + "\n", + "rc(\"font\", **{'family':'sans-serif','sans-serif':['Helvetica'], 'size':15})" ], "id": "e0db8165-a2d6-4ae6-9182-88ad41625848" }, @@ -711,7 +716,9 @@ "outputs": [], "source": [ "pgm = plot.vertical_chain(depth=5)\n", - "pgm.render().figure.savefig(\"./deepgp/deep-markov-vertical.svg\", transparent=True)" + "mlai.write_figure('deep-markov-vertical.svg',\n", + " figure=pgm.render().figure,\n", + " directory='./deepgp')" ], "id": "0c6d23c5-f13e-49aa-9708-48d8bfac81d9" }, @@ -781,7 +788,9 @@ "metadata": {}, "outputs": [], "source": [ - "import daft" + "import daft\n", + "from mlai import plot\n", + "import mlai" ], "id": "734eaf8a-f0bc-42b1-bc97-aa370a311d86" }, @@ -794,7 +803,9 @@ "pgm = plot.vertical_chain(depth=5, shape=[2, 7])\n", "pgm.add_node(daft.Node('y_2', r'$\\mathbf{y}_2$', 1.5, 3.5, observed=True))\n", "pgm.add_edge('f_2', 'y_2')\n", - "pgm.render().figure.savefig(\"./deepgp/deep-markov-vertical-side.svg\", transparent=True)" + "mlai.write_figure('deep-markov-vertical-side.svg',\n", + " figure=pgm.render().figure,\n", + " directory='./deepgp')" ], "id": "a4160027-6d3b-4366-8f9a-9d488835c063" }, diff --git a/_notebooks/12-deep-gps-II.ipynb b/_notebooks/12-deep-gps-II.ipynb index cf46b52..b99f47a 100644 --- a/_notebooks/12-deep-gps-II.ipynb +++ b/_notebooks/12-deep-gps-II.ipynb @@ -2873,7 +2873,7 @@ "metadata": {}, "outputs": [], "source": [ - "mnist = fetch_openml('mnist_784')" + "mnist = fetch_openml('mnist_784', version=1, as_frame=False, parser='liac-arff')" ], "id": "4dd1b849-4c7f-4da9-bc81-88a20da534c7" }, @@ -2906,9 +2906,11 @@ "N_per_digit = 100\n", "Y = []\n", "labels = []\n", + "data = np.asarray(mnist.data)\n", + "target = np.asarray(mnist.target).astype(str)\n", "for d in digits:\n", - " imgs = mnist['data'][mnist['target']==str(d)]\n", - " Y.append(imgs.loc[np.random.permutation(imgs.index)[:N_per_digit]])\n", + " imgs = data[target == str(d)]\n", + " Y.append(imgs[np.random.permutation(len(imgs))[:N_per_digit]])\n", " labels.append(np.ones(N_per_digit)*d)\n", "Y = np.vstack(Y).astype(np.float64)\n", "labels = np.hstack(labels)\n",