{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Out-of-sample Embedding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Imagine you have a citation network of scholars publishing papers. The nodes are the scholars, and an edge exists in a given pair of scholars if they're published a paper together.\n", "\n", "You've already found a representation using ASE or LSE and you have a set of latent positions, which you then clustered to figure out who came from which university. It took a long time for you to get this representation - there are a lot of people doing research out there!\n", "\n", "Now, suppose a new graduate student publishes a paper. Your network gets bigger by a single node, and you'd like to find this person's latent position (thus adding them to the clustering system). To do that, however, you'd have to get an entirely new representation for the network: your latent position matrix is $n \\times d$, and it would need to become $(n+1) \\times d$. Re-embedding the entire network with the new node added seems like it should be unecessary - after all, you already know the latent positions for every other node.\n", "\n", "This section is all about this problem: how to find the representation for new nodes without the computationally expensive task of re-embedding an entire network. As it turns out, there has been some work done, and there is a solution that can get you pretty close the latent position for the new node that you would have had. For more details and formality, see the 2013 paper \"Out-of-sample extension for latent position graphs\", by Tang et al (although, as with most science, the theory in this paper was built on top of other work from related fields).\n", "\n", "Let's make a network from an SBM, and an additional node that should belong to the first community. Then, we'll embed the network and explore how to find the latent position for the additional node. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Generation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from graspologic.simulations import sbm\n", "from graspologic.utils import remove_vertices\n", "\n", "# Generate parameters\n", "B = np.array([[0.8, 0.2],\n", " [0.2, 0.8]])\n", "\n", "# Generate both an original network along with community memberships, \n", "# and an out-of-sample node with the same SBM call\n", "network, labels = sbm(n=[101, 100], p=B, return_labels=True)\n", "labels = list(labels)\n", "\n", "# Grab out-of-sample node\n", "oos_idx = 0\n", "oos_label = labels.pop(oos_idx)\n", "\n", "# create our original network\n", "A, a_1 = remove_vertices(network, indices=oos_idx, return_removed=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What we have now is a network and an additional node. You can see the adjacency matrix for the network below, along with the adjacency vector for the additional node (Here, an “adjacency vector” is a vector with a 1 in every position that the out-of-sample node has an edge with an in-sample node). The heatmap on the left is a network with two communities, with 100 nodes in each community. The vector on the right is purple on row $i$ if the $i^{th}$ in-sample node is connected to the out-of-sample node." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, -0.1, 'Figure 7.1')" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from graphbook_code import heatmap\n", "from graphbook_code.plotting import cmaps\n", "\n", "fig = plt.figure(figsize=(8, 5))\n", "ax = fig.add_axes([0, 0, 1, 1])\n", "\n", "# heatmap\n", "heatmap(A, ax=ax, cbar=False)\n", "\n", "# adjacency vector\n", "ax = fig.add_axes([.85, 0, .1, 1])\n", "cmap = cmaps[\"sequential\"]\n", "plot = sns.heatmap(a_1[:, np.newaxis], ax=ax, cbar=False, cmap=cmap, xticklabels=False, yticklabels=20)\n", "plt.tick_params(axis='y', labelsize=10, labelleft=False, labelright=True)\n", "plt.ylabel(\"in-sample node index\")\n", "plot.yaxis.set_label_position(\"right\")\n", "\n", "# title\n", "fig.suptitle(\"Adjacency matrix (left) and vector for additional \\nnode (right)\", y=1.1, fontsize=16, x=.19, ha=\"left\");\n", "plt.figtext(0.5, -.1, \"Figure 7.1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After embedding with ASE, we have an embedding for the original network. The rows of this embedding contain the latent position for each original node. We'll call the embedding $X$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from graspologic.embed import AdjacencySpectralEmbed as ASE\n", "\n", "ase = ASE(n_components=2)\n", "ase.fit(A)\n", "X = ase.transform(A)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Figure 7.2')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from graphbook_code import plot_latents\n", "plot_latents(X, title=\"Latent positions for our original network (X)\");\n", "plt.figtext(0.5, 0, \"Figure 7.2\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Probability Vector Estimation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Everything up until now has just been pretty standard stuff. We still haven't done anything with our new node - all we have is a big vector that tells us which other nodes it's connected to, and our standard matrix of latent positions. However, it's time for a bit more exploration into the nature of the latent position matrix $X$, and what happens when you view it as a linear transformation. This will get us closer to understanding the out-of-sample embedding.\n", "\n", "Remember from the section on latent positions that $X$ can be used to estimate the block probability matrix. When you use ASE on a single network to make $X$, $XX^\\top$ estimates $P$: meaning, $(XX^\\top)_{ij}$, the element on the $i^{(th)}$ row and $j^{(th)}$ column of $XX^\\top$, will estimate the probability that node $i$ has an edge with node $j$.\n", "\n", "Let's take a single latent position vector - call it $v_i$ (this will be the $i_{th}$ row of the latent position matrix). What'll $X v_i$ look like? Well, it'll look the same as grabbing the $i_{th}$ column of $XX^\\top$. Meaning, $X v_i$ will be a single vector whose $j^{(th)}$ element estimates the probability that node $i$ will connect to node $j$.\n", "\n", "You can see this in action below. We took the latent position corresponding to the first node out of the latent position matrix (and called it $v_1$), and then multiplied it by the latent position matrix itself. What emerged is what you see below: a vector that shows the estimated probability that node 0 has an edge with each other node in the network. The true probabilities for the first half of nodes (the ones in the same community) should be .8, and the true probabilities for the second half of nodes in the other community should be .2. The average values were .775 and .149 - so, pretty close!" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "v_1 = X[0, :]\n", "v_est_proba = X @ v_1" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0.1, 'Figure 7.3')" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(3, 10))\n", "sns.heatmap(v_est_proba[:, np.newaxis], cbar=False, cmap=cmap, xticklabels=False, yticklabels=20, ax=ax)\n", "ax.text(1.1, 70, s=f\"average value: {v_est_proba[:100].mean():.3f}\", rotation=90)\n", "ax.text(1.1, 170, s=f\"average value: {v_est_proba[100:].mean():.3f}\", rotation=90)\n", "ax.set_ylabel(\"Node index\")\n", "\n", "plt.title(\"Estimated probability\\n vector\" + r\" for first node $X v_1$\");\n", "\n", "plt.figtext(0.5, 0.1, \"Figure 7.3\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inversion of Probability Vector Estimation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that our goal is to take the adjacency vector for a new node and use it to estimate that node's latent position without re-embedding the whole network. So far, we've essentially figured out how to use the node's latent position to get an estimated probability vector.\n", "\n", "Let's think about the term \"estimated probability vector\" for a second. This should be a vector associated to node $i$ with $n$ elements, where the $j^{(th)}$ element of the vector contains the probability that node $i$ will connect to node $j$. The thing we're starting with for the out-of-sample node, however, is an adjacency vector full of 0's and 1's - 0 if there isn't an edge, 1 if there is an edge.\n", "\n", "If you think about it, however, you can think of this adjacency vector as kind of an estimate for edge probabilities. Say you sample a node's adjacency vector from an RDPG, then you sample again, and again. Averaging all of your samples will get you closer and closer to the actual edge connection probabilities. So you can think of a single adjacency vector as an estimate for the edge probability vector!\n", "\n", "The point here is that if you can start with a latent position and then estimate the edge probabilities, it's somewhat equivalent (albeit going in the other direction) to start with an out-of-sample adjacency vector and estimate a node's the latent position.\n", "\n", "Let's call the estimated probability vector $\\hat{a_i}$. We know that $\\hat{a_i} = \\hat{X} \\hat{v_i}$: you multiply the latent position matrix by the $i_{th}$ latent position to estimate the probability vector (remember that the ^ hats above letters means we're getting an estimate for something, rather than getting the thing itself). How do we isolate the latent position $\\hat{v_i}$?\n", "\n", "Well, if $X$ were invertible, we could do $\\hat{X}^{-1} \\hat{a_i} = \\hat{v_i}$: just invert both sides of the equation to get $v_i$ by itself. Unfortunately, in practice, $X$ will almost never be invertible. We'll have to do the next-best thing, which is to use the *pseudoinverse*.\n", "\n", "We'll take a brief break in the coming section to talk about the pseudoinverse for a bit, then we'll come back and use it to estimate the out-of-sample latent position." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Moore-Penrose Pseudoinverse" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Moore-Penrose Pseudoinverse is useful to know in general, since it pops up a lot in a lot of different places. Say you have a matrix which isn't invertible. Call it $T$.\n", "\n", "The pseudoinverse $T^+$ is the closest approximation you can get to the inverse $T^{-1}$. This is best understood visually. Let's take $T$ to be a matrix which projects points on the x-y coordinate axis down to the x-axis, then flips them to their negative on the number line. The matrix would look like this:\n", "\n", "\\begin{align*}\n", " T &=\n", " \\begin{bmatrix}\n", " -1 & 0 \\\\\n", " 0 & 0 \\\\\n", " \\end{bmatrix}\n", "\\end{align*}\n", "\n", "Some information is inherently lost here. Because the second column is all zeroes, any information in the y-axis can't be recovered. For instance, say we have some vectors with different x-axis and y-axis coordinates:\n", "\\begin{align*}\n", " v_1 &= \\begin{bmatrix} 1 & 1 \\end{bmatrix}^\\top \\\\\n", " v_2 &= \\begin{bmatrix} 2 & 2 \\end{bmatrix}^\\top\n", "\\end{align*}\n", "\n", "When we use $T$ as a linear transformation to act on $v_1$ and $v_2$, the y-axis coordinates both collapse to the same thing (0, in this case). Information in the x-axis, however, is preserved." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Figure 7.4')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np # v 1.19.2\n", "import matplotlib.pyplot as plt # v 3.3.2\n", "from graphbook_code import draw_cartesian\n", "\n", "\n", "# make axis\n", "ax = draw_cartesian()\n", "\n", "# Enter x and y coordinates of points and colors\n", "xs = [1, 2]\n", "ys = [1, 2]\n", "colors = ['g', 'r']\n", "\n", "# Plot points\n", "ax.scatter(xs, ys, c=colors)\n", "\n", "# Draw lines connecting points to axes\n", "for x, y, c in zip(xs, ys, colors):\n", " ax.plot([x, x], [0, y], c=c, ls='--', lw=1.5, alpha=0.5)\n", " ax.plot([x, -x], [0, 0], c=c, ls='--', lw=1.5, alpha=0.5)\n", "\n", "\n", "# Draw arrows\n", "arrow_fmt = dict(markersize=4, color='black', clip_on=False)\n", "ax.plot((1), (0), marker='>', transform=ax.get_yaxis_transform(), **arrow_fmt)\n", "ax.plot((0), (1), marker='^', transform=ax.get_xaxis_transform(), **arrow_fmt)\n", "\n", "arrow_fmt = dict(markersize=4, color='black', clip_on=False)\n", "ax.plot((-1), (0), marker='<', **arrow_fmt)\n", "ax.plot((-2), (0), marker='<', **arrow_fmt)\n", "\n", "# Draw text\n", "ax.text(x=.9, y=1.2, s=\"$v_1$ (1, 1)\", fontdict=dict(c=\"green\"))\n", "ax.text(x=2.2, y=1.9, s=\"$v_2$ (2, 2)\", fontdict=dict(c=\"red\"))\n", "\n", "ax.text(x=-1.2, y=-.3, s=\"$T v_1$ (-1, 0)\", fontdict=dict(c=\"green\"))\n", "ax.text(x=-2.2, y=-.6, s=\"$T v_2$ (-2, 0)\", fontdict=dict(c=\"red\"));\n", "\n", "# input/output\n", "ax.text(x=2.3, y=1, s=\"input vectors\", fontdict=dict(c=\"black\"))\n", "ax.text(x=-2.2, y=-1.2, s=\"output vectors\", fontdict=dict(c=\"black\"));\n", "\n", "plt.suptitle(\"A Noninvertible Linear Transformation\", fontsize=18, y=1.1)\n", "plt.figtext(0.5, 0, \"Figure 7.4\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our goal is to reverse $T$ and bring $Tv_1$ and $Tv_2$ back to $v_1$ and $v_2$. Unfortunately, since both $v_1$ and $v_2$ get squished onto zero in the y-axis position after getting passed through $T$, we've lost all information about what was happening on the y-axis -- that's a lost cause. So it's impossible to get perfectly back to $v_1$ or $v_2$.\n", "\n", "If you restrict your attention to the x-axis, however, you'll see that $Tv_1$ and $Tv_2$ landed in different places ($v_1$ went to -1, and $v_2$ went to -2). You can use this information about the x-axis location of $Tv_1$ and $Tv_2$ to re-orient the x-axis values back to where they were prior to the vectors getting passed through X, even if it's impossible to figure out where the y-values were.\n", "\n", "That's what the pseudoinverse does: it reverses what it can, and accepts that some information has vanished." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Figure 7.5')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np # v 1.19.2\n", "import matplotlib.pyplot as plt # v 3.3.2\n", "\n", "# make axis\n", "ax = draw_cartesian()\n", "\n", "# Enter x and y coordinates of points and colors\n", "xs = [1, 2]\n", "ys = [1, 2]\n", "xs_out = [1, 2]\n", "ys_out = [0, 0]\n", "colors = ['g', 'r']\n", "\n", "\n", "# Plot points\n", "ax.scatter(xs, ys, c=colors)\n", "ax.scatter(xs_out, ys_out, c=colors)\n", "\n", "# Draw lines connecting points to axes\n", "for x, y, c in zip(xs, ys, colors):\n", " ax.plot([x, x], [0, y], c=c, ls='--', lw=1.5, alpha=0.5)\n", "\n", "arrow_fmt = dict(markersize=4, color='black', clip_on=False)\n", "\n", "# Draw text\n", "ax.text(x=.9, y=1.2, s=\"$v_1$ (1, 1)\", fontdict=dict(c=\"green\"))\n", "ax.text(x=2.2, y=1.9, s=\"$v_2$ (2, 2)\", fontdict=dict(c=\"red\"))\n", "\n", "ax.text(x=.2, y=-.4, s=\"$T^+ (X v_1$)\", fontdict=dict(c=\"green\"))\n", "ax.text(x=1.8, y=-.4, s=\"$T^+ (X v_2$)\", fontdict=dict(c=\"red\"));\n", "\n", "plt.suptitle(\"The Best Approximation the Pseudoinverse Can Do\", fontsize=18, y=1.1)\n", "plt.figtext(0.5, 0, \"Figure 7.5\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using the Pseudoinverse for Out-of-Sample Estimation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's get back to estimating our out-of-sample latent position.\n", "\n", "Remember that we had a nonsquare latent position matrix $X$. Like we learned before, we can get the probability vector $a_i$ (the vector with its probability of connecting with node $j$ in the $j_{th}$ position) for a node by passing its latent position ($v_i$) through the latent position matrix.\n", "\n", "\\begin{align*}\n", "a_i = X v_i\n", "\\end{align*}\n", "\n", "We can think of $X$ as a matrix the same way we thought of $T$: it's a linear transformation that eats a vector, and doesn't necessarily preserve all the information about that vector when it outputs something (In this case, since $X$ brings lower-dimensional latent positions to higher-dimensional probability vectors, what's happening is more of a restriction on which high-dimensional vectors you can access than a loss of information, but that's not particularly important).\n", "\n", "The pseudoinverse, $X^+$, is the best we can do to bring a higher-dimensional adjacency vector to a lower-dimensional latent position. Since the adjacency vector just approximates the probability vector, we can call it $\\hat{a_i}$. In practice, the best we can do generally turns out to be a pretty good guess, and so we can get a decent estimation of the latent position $v_i$.\n", "\n", "\\begin{align*}\n", "X^+ \\hat{a_i} \\approx X^+ (X v_i) \\approx v_i\n", "\\end{align*}\n", "\n", "Let's see it in action. Remember that we already grabbed our out-of-sample latent position and called it `a_1`. We use numpy's pseudoinverse function to generate the pseudoinverse of the latent position matrix. Finally, we use it to get `a_1`'s estimated latent position, and call it `v_1`. You can see the location of this estimate in Euclidean space below: it falls squarely into the first community, which is where it should be." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from numpy.linalg import pinv\n", "\n", "# Make the pseudoinverse of the latent position matrix\n", "X_pinverse = pinv(X)\n", "\n", "# Get its estimated latent position\n", "v_1 = X_pinverse @ a_1" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.73171317, 0.50473619])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v_1" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, 'Figure 7.6')" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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LCIiIiIShRJlEREREZEolCiLiIiIiEShRFlEREREJAolyiIiIiIiUShRFhERERGJQomyiIiIiEgUSpRFRERERKJQoiwiIiIiEoUSZRERERGRKJQoi4iIiIhEoURZRERERCQKJcoiIiIiIlEoURYRERERiUKJsoiIiIhIFEqURURERESiUKIsIiIiIhKFEmURERERkSiUKIuIiIiIRKFEWUREREQkCiXKIiIiIiJRKFEWEREREYlCibKIiIiISBRKlEVEREREolCiLCIiIiIShRJlEREREZEolCiLiIiIiEShRFlEREREJAolyiIiIiIiUShRFhERERGJQomyiIiIiEgUSpRFRERERKJQoiwiIiIiEoUSZRERERGRKJQoi4iIiIhEoURZRERERCQKJcoiIiIiIlEoURYRERERiUKJsoiIiIhIFEqURURERESiUKIsIiIiIhKFEmURERERkSiUKIuIiIiIRKFEWUREREQkCiXKIiIiIiJRKFEWEREREYlCibKIiIiISBRKlEVEREREolCiLCIiIiIShRJlEREREZEolCiLiIiIiEShRFlEREREJAolyiIiIiIiUShRFhERERGJQomyiIiIiEgUSpRFRERERKJQoiwiIiIiEoUSZRERERGRKJQoi4iIiIhEoURZRERERCQKJcoiIiIiIlEoURYRERERiUKJsoiIiIhIFEqURURERESiUKIsIiIiIhKFEmURERERkSiUKIuIiIiIRKFEWUREREQkCiXKIiIiIiJRKFEWEREREYlCibKIiIiISBRKlEVEREREolCiLCIiIiIShRJlEREREZEolCiLiIiIiEShRFlEREREJAolyiIiIiIiUShRFhERERGJQomyiIiIiEgUSpRFRERERKJQoiwiIiIiEoUSZRERERGRKJQoi4iIiIhEoURZRERERCQKJcoiIiIiIlEoURYRERERiUKJsoiIiIhIFEqURURERESiUKIsIiIiIhKFEmURERERkSiqTKJsZk+a2c3h7wea2U/xjqm6sMATZrbBzKbGOx4RERGRslDhE2UzmxImYLWKuo27f+bu3WIZV2VlZmPM7PMyrvYA4DCgtbsPKeO6RUREROKiQifKZtYeOBBwYGR8oxEAM6sRpbgdsMTdt5ZRfSIiIiJxV6ETZeBs4GvgSeCcyAVm1t/MZprZZjN7AagdsWy4mS2P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ifLbb79NgwYNSt3Ghx9+SO/evfn222858MADi7RNdnZ2qduV6JQoS2WUbkZd4FPgOTPuIbg7n4hIlTV27Fh69OhBnz59+NOf/sSXX37J66+/zrXXXku/fv1YuHAhY8aMYdKkSQC0b9+e66+/nn79+jFo0CBmzpzJEUccQadOnXZNs7ZlyxZGjBjBgAED6N27N6+99tquthYuXEi/fv249tprAbjjjjsYPHgwffr02W0u41tuuYWuXbtywAEH8NNPPxW6H4888giDBw+mb9++nHTSSWzbti3qvixcuJAjjzySgQMHcuCBB/Ljjz8CMGbMGK644gr2228/OnbsuGt/x44dy2effUa/fv246667dmtzypQpDBs2jGOOOYZu3bpxySWXkJOTA8Dzzz9P79696dWrF9dddx0QJJ5jxoyhV69e9O7de1d9ucf33nvvZcWKFRx88MEcfPDBu4732rVrAbjzzjvp1asXvXr14u677waCRL579+5ceOGF9OzZk8MPP5yMjIzd4pw1axZ//vOfee211+jXrx8ZGRlR4wOoW7cu11xzDX379uWrr74q9LhLyehiPqmMjgcygKuBM4D6wPi4RiQiUkYyMjLo16/frufXX389hx56KK+++io//vgjZkZ6ejoNGjRg5MiRHHvssZx88slR62rbti2zZs3i6quvZsyYMXzxxRds376dXr16cckll1C7dm1effVV6tWrx9q1axk6dCgjR47k9ttv5/vvv2fWrFkAvP/++8yfP5+pU6fi7owcOZJPP/2UlJQUJk6cyKxZs8jKymLAgAEMHDiwwP078cQTufDCCwG48cYbeeyxx/jDH/6wx76MGDGChx56iC5duvDNN99w2WWX8dFHHwHw66+/8vnnn/Pjjz8ycuRITj75ZG6//Xb+9a9/8eabb0Ztd+rUqcydO5d27dpx5JFH8sorr7Dffvtx3XXXMWPGDBo2bMjhhx/O5MmTadOmDWlpaXz//fcAewypuOKKK7jzzjv5+OOPadKkyW7LZsyYwRNPPME333yDu7PPPvtw0EEH0bBhQ+bPn8/zzz/PI488wu9+9ztefvllzjzzzF3b9uvXj/HjxzN9+nTuu+8+VqxYETW+E044ga1bt7LPPvvw73//u8DjLaWjRFkqo4uBF9xJA56KdzAiImUpd+hFpKysLGrXrs3555/Psccey7HHHlukukaOHAlA79692bJlC6mpqaSmplKrVi3S09NJSUnhL3/5C59++ikJCQmkpaWxatWqPep5//33ef/99+nfvz8Q9ETPnz+fzZs3M2rUKOrUqbNbewX5/vvvufHGG0lPT2fLli0cccQRe6yzZcsWvvzyS0455ZRdZTt27Nj1+wknnEBCQgI9evSIGm80Q4YMoWPHjgCcfvrpfP755yQlJTF8+HCaNm0KwBlnnMGnn37K//3f/7Fo0SL+8Ic/cMwxx3D44YcXqQ2Azz//nFGjRpGSkgIEHww+++wzRo4cSYcOHXZ9CBo4cCBLliwpsK5p06ZFje+EE04gMTGRk046qchxSclo6IVURqnA+2Z8ZsbvzWge74BERGKpRo0aTJ06lZNPPpk333yTI488skjb1apVC4CEhIRdv+c+z8rK4rnnnmPNmjXMmDGDWbNm0bx5c7Zv375HPe7O9ddfv2vc9IIFCzj//PNLtC9jxozhvvvuY86cOfz1r3+N2l5OTg4NGjTYbaz2vHnz9tiv3NiKwswKfB6pYcOGzJ49m+HDh/PQQw9xwQUXFKmNwkTGnZiYSFZWVonrql27NomJiWURlhRAibJUOu78zZ2ewOVAC+ATM0p/mbeISAW1ZcsWNm7cyNFHH81dd93F7NmzAUhNTWXz5s0lrnfjxo00a9aMpKQkPv74Y5YuXRq13iOOOILHH3+cLVu2AJCWlsbq1asZNmwYkydPJiMjg82bN/PGG28U2ubmzZtp0aIFmZmZPPfcc7vKI9usV68eHTp04KWXXgKCZDh3n/NT2LGYOnUqixcvJicnhxdeeIEDDjiAIUOG8Mknn7B27Vqys7N5/vnnOeigg1i7di05OTmcdNJJ3HzzzcycObPI7R144IFMnjyZbdu2sXXrVl599dUiX5SXV37xSfnR0AupzFYDK4F1QLM4xyIiUibyjlE+8sgjufLKKzn++OPZvn077s6dd94JwGmnncaFF17Ivffeu+uituI444wzOO644+jduzeDBg1i7733BqBx48bsv//+9OrVi6OOOoo77riDefPmse+++wLBhWTPPvssAwYM4NRTT6Vv3740a9aMwYMHF9rm3//+d/bZZx+aNm3KPvvssyvZzLsvzz33HJdeeik333wzmZmZnHbaafTt2zffevv06UNiYiJ9+/ZlzJgxXH311bstHzx4ML///e9ZsGABBx98MKNGjSIhIYHbb7+dgw8+GHfnmGOO4fjjj2f27Nmce+65uy74u+222/Zo76KLLuLII4+kZcuWfPzxx7vKBwwYwJgxYxgyZAgAF1xwAf379y90mEU0LVq0iBqflB8r6lcW5W243VQxA5MyNcXH5//dVz7MuAz4HdAUeAl40Z2SzylUzgYNGuTTp0+PdxgiItXGlClTCrzQT8TMZrj7HlPNqkdZKqM2wFXuzIp3ICIiIlJ1KVGWSsed6+Mdg4iIVB7Dhw9n+PDh8Q5DKiFdzCciIiIiEoUSZREREZEqas6cOfzyyy/xDqPSUqIslZIZ7cw4NPw92YzUeMckIiJS0cyYMYNFixbFO4xKS4myVDpmXAhMAv4bFrUGJsctIBGRGElPT+eBBx7Y9XzJkiX06tWrxPXde++9dO/enTPOOAOA/fbbr8SxlMS4ceP417/+Vey2K7uyOHZ5PfTQQ1x66aW7nt94442cddZZu57PnTuXSy65hKeeeoo777yTSy65pMh3MZTfKFGWyuhyYH9gE4A789E8yiJSBZV1gvXAAw/wv//9b9eNPr788ss91nH3XfMHxzKWaG1XVSU5dvm9DrnOPvts3nzzTdLT03nzzTd56623ePjhh3ct79GjBw899BDnnHMOf/zjH3nooYdo3lw3si0uJcpSGe1wZ2fuEzNqAJp3W0SqnLFjx7Jw4UL69evHtddeC0B2djYXXnghPXv25PDDDycjIwOAZ599liFDhtCvXz8uvvhisrOzd6vrkksuYdGiRRx11FHcddddQHDjEAh6qrt168bZZ59Nr169WLZsGccccwx9+/alV69evPDCC1FjiXTCCScwcOBAevbsuVvCdsstt9C1a1cOOOAAfvrpp13luW0XtO3TTz9Nnz596Nu37269pdH2dcmSJXTv3j3qsYlWz0033cTdd9+9q84bbriBe+65Z4/jf//99+96Htkjnt/xjtZW3mN355130qtXL3r16rVbDNFeh/zUqVOH008/nRtuuIErrriCSZMmkZycnO/60UyaNImhQ4fSt29fDjjgANasWVOs7asFd6+Qj6zMbNej6j9Kcm6A/xP8L+A/gh8G/ir4LfE+Z4v6GDhwoIuIFMXixYu9Z8+euz1PTEz0b7/91t3dTznlFH/mmWd87ty5fuyxx/rOnTvd3f3SSy/1p556ao/62rVr52vWrNn1PCUlZVe9ZuZfffWVu7tPmjTJL7jggl3rpaen7xFLXuvWrXN3923btnnPnj197dq1Pn36dO/Vq5dv3brVN27c6J06dfI77rhjt7bz2/b777/3Ll267Io3d5389jW/Y5NfPYsXL/b+/fu7u3t2drZ37NjR165du9s+zZw504cNG7breffu3f2XX37JN4aC2so9drnHZMuWLb5582bv0aOHz5w5M+rr4O5+1FFHeVpaWtRjPm/ePAf8tddey/d1KUjk/o4bN87vu+++EtVTFQDTPcr/bM2jLJXRWOB8YA5wMfA28GhcIxIRKScdOnTYdYvrgQMHsmTJEtLT05kxY8auW0hnZGTQrFnxRqS1a9eOoUOHAtC7d2+uueYarrvuOo499lgOPPBANmzYUOD29957L6+++ioAy5YtY/78+Xz99deMGjWKOnXqADBy5Mgibztt2jROOeUUmjRpAkCjRo0A+PDDD6Pu67Bhw6Iemw0bNkStp3379jRu3Jhvv/2WVatW0b9/fxo3brxbXP3792f16tWsWLGCNWvW0LBhQ9q0acN9990XNYaNGzdGbSvS559/zqhRo0hJSQHgxBNP5LPPPqN///57vA4Ab7/9dr7HfPz48TRt2pSsrKx81ynIk08+yQsvvMCOHTtYuXIlt956a4nqqcoqbKI8ImlcvEOQcjDFxxd7G3dygEfCh4hItVKrVq1dvycmJpKRkYG7c84553DbbbeVuN7cxA2ga9euzJw5k7fffpsbb7yRESNGcPbZZ+e77ZQpU/jggw/46quvqFOnDsOHD2f79u1Fare42+a3r0uWLIl6bApywQUX8OSTT7Jy5UrOO++8qOuccsopTJo0iZUrV3LqqacWGMN//vOfAtsrisjXoSD//ve/2b59Oy+++CJ//etfOfHEE4vVztNPP83UqVP56KOPqFu3LsOGDaNnz54lCblK0xhlqXTMmGPGd3ken5lxlxmNC69BRKRySE1NZfPmzYWuN2LECCZNmsTq1asBWL9+PUuXLi1xuytWrKBOnTqceeaZXHvttcycObPAWDZu3EjDhg2pU6cOP/74I19//TUAw4YNY/LkyWRkZLB582beeOONIm97yCGH8NJLL7Fu3bpd+1SSfc2vHoBRo0bx7rvvMm3aNI444oio25966qlMnDiRSZMmccoppxQYQ35tRR67Aw88kMmTJ7Nt2za2bt3Kq6++yoEHHphv/NF89NFHPPHEEzz11FMMHz6cTZs2MWvWrGLVMWfOHPbbbz/q1q3Lyy+/zJdffknv3r2LVUd1UGF7lEUK8A6QDUwIn58G1AFWAk8Cx8UnLBGRstW4cWP2339/evXqxVFHHcXll18edb0ePXpw8803c/jhh5OTk0NSUhL3338/7dq1K1G7c+bM4dprryUhIYGkpCQefPDBPWK54447dq1/5JFH8tBDD9G9e3e6deu2a+jAgAEDOPXUU+nbty/NmjXbNVQBwMwK3LZnz57ccMMNHHTQQSQmJtK/f3+efPLJfPd1r732irov+dUDULNmTQ4++GAaNGhAYmJivttv3ryZVq1a0aJFiwKP99ChQ6O2lffYjRkzhiFDhgBBr3busItojj76aB599FFatmwJwC+//MIFF1zAW2+9RWpqcAuBK6+8krvvvnvXfhXFmDFjOPHEE3nuuec4/PDD6dixY5F7s6sTC8YvVzzD7aaKGZiUqSk+3oq7jRkz3RkQrcyMOe5U6I/EgwYN8unTp8c7DBGRuFm3bh0DBgwoVa93WcjJyWHAgAG89NJLdOnSJa6xSHyZ2Qx3H5S3XEMvpDJKNGNI7hMzBgO5XQElu6JBRETKxYoVK9h3333505/+FNc45s6dS+fOnRkxYoSSZMlXTIZemFl94HrgBIIbQTiwGngNuN3d02PRrlQbFwCPm1EXMIIbj1xgRgpQ8itZREQk5lq2bMnPP/8c7zDo0aOHbu0shYrVGOUXgY+A4e6+EsDM9gLOCZcdHqN2pRpwZxrQ24z64fONEYtfjE9UIiIiUtXEKlFu7+7/iCwIE+Z/mFn0+VdEisGMY4CeQO3wehDcKf5ccyIiIiL5iNUY5aVm9mcz23VTcTNrbmbXAfnfj1GkCMx4CDgV+APB0ItTgJJd2i0iIiKSj1glyqcCjYFPzGyDma0HpgCNgN/lt5GZXWRm081s+gpmxig0qQL2c+dsYIM7fwP2BbrGOSYRERGpYmKVKHcFbnX3vYFWwH3AwnBZdn4bufvD7j7I3Qe13H32L5FIubds2mZGSyATaBHHeERERKQKilWi/DiwNfz9biAVuB3YBjwRozal+njDjAbAHcBMYAm/3XxEREREpEzE6mK+BHfPnc92kLvndg9/bmazYtSmVANmJAAfupMOvGzGm0DtPDNfiIiIiJRarHqUvzezc8PfZ5vZIAAz60rwNblIibiTA9wf8XyHkmQRERGJhVglyhcAB5nZQqAH8JWZLQIeCZeJlMaHZpxkRrFvfy0iIiJSVDEZeuHuG4ExZlYP6BC2s9zdV8WiPal2Lgb+CGSbkUEwRZy7Uy++YYmIiEhVEqsxygC4+yZgdizbkOrHndR4xyAiIiJVX6yGXojEjBlmxplm/F/4vI0ZQ+Idl4iIiFQtSpSlMnqA4CYjo8PnW4i4wE9ERESkLMR06IVIjOzjzgAzvgVwZ4MZNeMdlIiIiFQt6lGWyijTjETAAcxoCuTENyQRERGpapQoS2V0L/Aq0MyMW4DPgVvjG5KIiIhUNRp6IZWOO8+ZMQMYQTA13AnuzItzWCIiIlLFKFGWSseMe4GJ7rqAT0RERGJHQy+kMpoB3GjGQjP+ZcageAckIiIiVY8SZal03HnKnaOBwcBPwD/MmB/nsERERKSKUaIslVlnYG+gHfBjnGMRERGRKkaJslQ6Zvwz7EEeD3wPDHLnuDiHJSIiIlWMLuaTymghsK87a+MdiIiIiFRdSpSl0nHnv2Y0NGMIUDui/NM4hiUiIiJVjBJlqXTMuAC4EmgNzAKGAl8Bh8QxLBEREaliNEZZKqMrCWa8WOrOwUB/ID2uEYmIiEiVo0RZKqPt7mwHMKOWOz8C3eIck4iIiFQxGnohldFyMxoAk4H/mbEBWBrXiERERKTKUaIslY47o8Jfx5nxMVAfeDeOIYmIiEgVpERZKjV3Pol3DCIiIlI1aYyySAHM7Egz+8nMFpjZ2CjL/2hmc83sOzP70MzaxSNOERERKXsVtkf5w8xx8Q5BqjkzSwTuBw4DlgPTzOx1d58bsdq3wCB332ZmlwL/BE4t/2hFRESkrKlHWSR/Q4AF7r7I3XcCE4HjI1dw94/dfVv49GuCuZ1FRESkClCiLJK/VsCyiOfLw7L8nA+8E9OIREREpNxU2KEXIpWJmZ0JDAIOymf5RcBFAG3bti3HyERERKSk1KMskr80oE3E89Zh2W7M7FDgBmCku++IVpG7P+zug9x9UNOmTWMSrIiIiJStCtujPCJpXLxDkHIwxcfHO4SCTAO6mFkHggT5NGB05Apm1h/4L3Cku68u/xBFREQkVtSjLJIPd88Cfg+8B8wDXnT3H8xsvJmNDFe7A6gLvGRms8zs9TiFKyIiImWswvYoi1QE7v428Haespsifj+03IMSERGRcqEeZRERERGRKCpsj7JuOCIiIiIi8aQeZRERERGRKJQoi4iIiIhEUWGHXmh6uOqhgk8PJyIiItWYepRFRERERKJQoiwiIiIiEoUSZRERERGRKJQoi4iIiIhEEZOL+cysBnA+MApoGRanAa8Bj7l7ZizaFREREREpK7Ga9eIZIB0YBywPy1oD5wDPAqfGqF0RERERkTIRq0R5oLt3zVO2HPjazH6OUZsiIiIiImUmVmOU15vZKWa2q34zSzCzU4EN+W1kZheZ2XQzm76CmTEKTURERESkcLFKlE8DTgZWmtnPYS/ySuDEcFlU7v6wuw9y90EtGRCj0ERERERECheroRcrgLeBR4GZwJHA/sAP/DZmWURERESkwopVovxEWHcysBFIAV4FRgBDCC7qExERERGpsGKVKPd29z7hNHFpQEt3zzazZ4HZRangw8xxMQpNRERERKRwsRqjnGBmNYFUoA5QPyyvBSTFqE0RERERkTITqx7lx4AfgUTgBuAlM1sEDAUmxqhNEREREZEyE5NE2d3vMrMXwt9XmNnTwKHAI+4+tSh1jEgaF4vQpIKZ4uPjHYKIiIhIVLHqUcbdV0T8ng5MilVbIiIiIiJlLVZjlEVEREREKjUlyiIiIiIiUShRFhERERGJQomyiIiIiEgUSpRFRERERKKI2awXpaU784mIiIhIPKlHWUREREQkCiXKIiIiIiJRKFEWEREREYlCibKIiIiISBQV9mK+EUnj4h2ClIMpPj7eIYiIiIhEpR5lEREREZEoCk2Uzax2lLImsQlHRERERKRiKEqP8jQzG5r7xMxOAr6MXUgiIiIiIvFXlDHKo4HHzWwK0BJoDBwSy6BEREREROKt0ETZ3eeY2S3AM8BmYJi7L495ZCIiIiJSZjIzM1m+fDnbt2+PdyhxU7t2bVq3bk1SUlKR1i80UTazx4BOQB+gK/Cmmf3H3e8vVaQiIiIiUm6WL19Oamoq7du3x8ziHU65c3fWrVvH8uXL6dChQ5G2KcoY5TnAwe6+2N3fA/YBBpQiThEREREpZ9u3b6dx48bVMkkGMDMaN25crB71QhNld78baGtmh4ZFO4GrShKgiIiIiMRPdU2ScxV3/4syPdyFwCTgv2FRa2BycQMTERERkYpn5cqVnHbaaXTq1ImBAwdy9NFH8/PPP8c7rKhWrFjBySefDMCsWbN4++23Y9peUWa9uBwYAnwD4O7zzaxZTKMCPswcF+smRERERKo1d2fUqFGcc845TJw4EYDZs2ezatUqunbtGufo9tSyZUsmTZoEBIny9OnTOfroo2PWXlHGKO9w9525T8ysBuAxi0hEREREysXHH39MUlISl1xyya6yvn37csABB3DttdfSq1cvevfuzQsvvADAlClTOOiggzj++OPp2LEjY8eO5bnnnmPIkCH07t2bhQsXAjBmzBguvfRShg4dSseOHZkyZQrnnXce3bt3Z8yYMbvaqlu37q7fJ02atGvZmDFjuOKKK9hvv/3o2LHjruR4yZIl9OrVi507d3LTTTfxwgsv0K9fP1544QW6dOnCmjVrAMjJyaFz5867npdUUXqUPzGzvwDJZnYYcBnwRqlaLYIRSeNi3YRUAFN8fLxDEBERqba+//57Bg4cuEf5K6+8wqxZs5g9ezZr165l8ODBDBs2DAh6nOfNm0ejRo3o2LEjF1xwAVOnTuWee+7hP//5D3fffTcAGzZs4KuvvuL1119n5MiRfPHFFzz66KMMHjyYWbNm0a9fvwJj+/XXX/n888/58ccfGTly5K4hFwA1a9Zk/PjxTJ8+nfvuuw+AH3/8keeee46rrrqKDz74gL59+9K0adNSHZ+i9CiPBdYQzH5xMfA2cGOpWhURERGRCuvzzz/n9NNPJzExkebNm3PQQQcxbdo0AAYPHkyLFi2oVasWnTp14vDDDwegd+/eLFmyZFcdxx13HGZG7969ad68Ob179yYhIYGePXvutl5+TjjhBBISEujRowerVq0qdP3zzjuPp59+GoDHH3+cc889t/g7nkdRbjiSAzwSPkRERESkiujZs+euYQ1FVatWrV2/JyQk7HqekJBAVlbWHutFrpN3vchZKPJO2xa5jXvho37btGlD8+bN+eijj5g6dSrPPfdccXYrqnx7lM1sjpl9l9+j1C2LiIiISFwdcsgh7Nixg4cffnhX2XfffUeDBg144YUXyM7OZs2aNXz66acMGTKkzNtv3rw58+bNIycnh1dffbVY26amprJ58+bdyi644ALOPPNMTjnlFBITE0sdX0FDL44FjgPeDR9nhI93CIZfiIiIiEglZma8+uqrfPDBB3Tq1ImePXty/fXXM3r0aPr06UPf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ZvZDYKqZGTAT+HNsEYvkosPHwZBzoHl7P9RYnBo13rNujat/nYjkjLRPOFJbJ9jPMzMwSalp7hZNOCKSy0qKYdMyaNc7+yfXKC+Hha/A7h1+VrsmzeKOSERSpLoJR9T0QkQkXUp3wablfgKOfDH553DX4fDKz/zkI9msUSMYfDoMO19JskieUKIsIpIOZSXw0o/h98Pg7T/EHU16lBTDgol+/aOJULIz3ngkd2xeCZtXxR2F5AElyiIi6bBjI3z4iF+flycdwZo0g9P/Bw4+G75+OxS2iDsiyQVL3oG7R8O9x8LKmXFHIzlOnflERNKhdRefNM5/Bo68Lu5o0mfY+X4RSZW182HXFr++7uPwGR9FUiRjE2XNzCciOeeIcX4RkfobfJofW7txExh4UtzRSI7L2ERZREREZB/t+8JZv487CskTaqMsIiKS69YvhFWz445CJOsoURYREQE/bN+bv4M/Hg7zn407mtRZMw/+fCL8+QQ/+oiI1JoSZREREYCta2DqL2H9Z/DevXFHkzqbl8OuzX4c66++iDsakayiNsoiIiIALTtB0Tj48EEYflHc0aROv+PhpF/Azo0w/OK4oxHJKhk7hXVZaXlmBiYp1bigkaawFpHMUVYKxZt80iwieUNTWIuIiOxP4wIlySLyL0qURURERERCKFEWEREREQmhRFlEREREJIQSZRERERGREEqURURERERCKFEWEREREQmhRFlEREREJIQSZRERERGREEqURURERERCKFEWEREREQmhRFlEREREJIQSZRERERGREEqURURERERCKFEWEREREQmhRFlEREREJIQSZRERERGREEqURURERERCKFEWEREREQmhRFlEREREJIQ55+KOQSSvmNmXwFKgE7A+5nDSJV/Kmi/lBJU1F+VLOSF/ypov5YSGl7Wvc65z1Y1KlEViYmYznHNFcceRDvlS1nwpJ6isuShfygn5U9Z8KSdEV1Y1vRARERERCaFEWUREREQkhBJlkfjcF3cAaZQvZc2XcoLKmovypZyQP2XNl3JCRGVVG2URERERkRCqURYRERERCaFEWSRFzOx0M/vUzBaa2Y3VvOZiM1tgZh+ZWbLS9ivM7PNguaLS9lFmNi84551mZukoS03qW04zG2Fm7wbb5prZJZVe/4CZLTaz2cEyIk3FqVED39OySuV5vtL2/mb2XnDO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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.gridspec as gridspec\n", "np.random.seed(1)\n", "\n", "# setup\n", "fig = plt.figure(figsize=(12, 9))\n", "gs = fig.add_gridspec(3, 4)\n", "\n", "# adjacency vector\n", "ax = fig.add_subplot(gs[:, 0])\n", "sns.heatmap(a_1[:, np.newaxis], cbar=False, cmap=cmap, xticklabels=False, yticklabels=20, ax=ax)\n", "ax.text(1.1, 70, s=f\"average value: {a_1[:100].mean():.3f}\", rotation=90, c=\"blue\")\n", "ax.text(1.1, 170, s=f\"average value: {a_1[100:].mean():.3f}\", rotation=90, c=\"orange\")\n", "ax.set_ylabel(\"Node index\")\n", "ax.set_title(r\"Adjacency vector for\" + \"\\n\" + \" the first node $a_1$\");\n", "\n", "# latent position plot\n", "ax = fig.add_subplot(gs[:, 1:])\n", "plot = plot_latents(X, ax=ax, labels=labels, title=\"Estimated latent positions with out-of-sample estimate\")\n", "plot.scatter(x=v_1[0], y=v_1[1], marker='*', s=300, edgecolor=\"black\")\n", "plot.annotate(r\"Estimated latent position for\" + \"\\n\" + \" the first adjacency vector: $X^+ a$\", xy=(v_1[0]+.002, v_1[1]+.008), \n", " xytext=(v_1[0]-.02, v_1[1]-.2), arrowprops={\"arrowstyle\": \"->\", \"color\": \"k\"})\n", "sns.move_legend(ax, \"center right\")\n", "fig.subplots_adjust(wspace=.5)\n", "\n", "plt.suptitle(\"Estimating the Out-of-Sample Latent Position\", fontsize=18, y=1.1)\n", "plt.figtext(0.5, 0, \"Figure 7.6\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using Graspologic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, you don't have to do all of this manually. Below we generate an adjacency matrix $A$ from an SBM, as well as the adjacency vector for an out-of-sample node $a_1$. Once we fit an instance of the ASE class, the latent position for any new nodes can be predicted by simply calling `ase.transform` on the new adjacency vectors. \n", "\n", "You can do the same thing with multiple out-of-sample nodes if you want by stacking their adjacency vectors on top of each other in a numpy array, then transforming the whole stack." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from graspologic.embed import AdjacencySpectralEmbed as ASE\n", "\n", "# Generate parameters\n", "B = np.array([[0.8, 0.2],\n", " [0.2, 0.8]])\n", "\n", "# Generate a network along with community memberships\n", "network, labels = sbm(n=[101, 100], p=B, return_labels=True)\n", "labels = list(labels)\n", "\n", "# Grab out-of-sample vertex\n", "oos_idx = 0\n", "oos_label = labels.pop(oos_idx)\n", "A, a_1 = remove_vertices(network, indices=oos_idx, return_removed=True)\n", "\n", "# Make an ASE model\n", "ase = ASE(n_components=2)\n", "X = ase.fit_transform(A)\n", "\n", "# Predict out-of-sample latent positions by transforming\n", "v_1 = ase.transform(a_1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "data": { "image/png": "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t+T5Y489xqpVq+yOIS0tjTfeeKPK6z3xxBO88MILlX7dWun3UlWxsbF8+umn1V6/MqyP7yuvvML58+dL5l111VWkpaXZvY+kpCQGDBhAnz59+Pnnn+3enhANlSS0OsDX15cdO3aUPObNm1fmsqWTwJNPPsno0aPtjqG6Cc0e9SGhWR/f0glt5cqVNGnSxO59rF69ml69erF9+3aGDh1aqXUKCwvt3q8QrkYSWh02b948evbsSe/evfnzn//Mr7/+ypdffslDDz1EVFQUR44cYdasWSxfvhyADh068PDDDxMVFUV0dDTbtm1jzJgxdOrUiTfffBOAzMxMRo0aRd++fenVqxdffPFFyb6OHDlCVFQUDz30EADPP/88MTEx9O7dm8cff7wkrn/84x907dqVIUOGcODAgQrfxzvvvENMTAyRkZFcd911nD9/3uZ7OXLkCGPHjqVfv34MHTqU/fv3AzBr1izuvfdeBg0aRFhYWMn7nTdvHj///DNRUVG8/PLLF+1z7dq1DBs2jPHjx9OtWzfmzp1LUVERAIsWLaJXr15ERETw17/+FTAJYtasWURERNCrV6+S7RUf31dffZVTp04xcuRIRo4cWXK8k5OTAXjppZeIiIggIiKCV155BTAJt0ePHtx+++2Eh4dz5ZVXkp2dfVGcO3bs4C9/+QtffPEFUVFRZGdn24wPwN/fnwcffJDIyEg2bNhQ4XEXosHRWtfJR79+/XRD4ebmpiMjI0seixcv1snJybpr1666qKhIa611amqq1lrrW265RS9btqxkXevn7du312+88YbWWuv7779f9+rVS587d04nJibqkJAQrbXW+fn5Oj09XWutdVJSku7UqZMuKirSx44d0+Hh4SXb/e677/Ttt9+ui4qKdGFhoR4/frz+6aef9JYtW3RERITOysrS6enpulOnTvr555+/5D09/vjjJa8nJyeXvP7II4/oV1991eZ7ufzyy/XBgwe11lpv3LhRjxw5smS5KVOm6MLCQr1nzx7dqVMnrbXWa9as0ePHj7d5TNesWaO9vb31kSNHdEFBgR49erRetmyZjo+P123bttWJiYk6Pz9fjxw5Uq9YsUJv2bJFjx49umR9W8e7ffv2OikpqWSZ4ufFxyQzM1NnZGTonj176m3btuljx45pd3d3vX37dq211lOnTtUfffTRJbF+8MEH+u67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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(7,7))\n", "\n", "# latent position plot\n", "plot = plot_latents(X, ax=ax, labels=labels, title=\"Latent positions with out-of-sample estimate\")\n", "plot.scatter(x=v_1[0], y=v_1[1], marker='*', s=300, edgecolor=\"black\")\n", "plot.annotate(r\"Estimated latent position for\" + \"\\n\" + \" the first adjacency vector: $X^+ a_0$\", xy=(v_1[0]+.002, v_1[1]+.008), \n", " xytext=(v_1[0]-.1, v_1[1]+.3), arrowprops={\"arrowstyle\": \"->\", \"color\": \"k\"})\n", "sns.move_legend(ax, \"center right\")\n", "fig.subplots_adjust(wspace=.5)\n", "\n", "plt.figtext(0.5, 0, \"Figure 7.7\")" ] } ], "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 }