{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Smokes Friends Cancer\n", "\n", "A classic example of Statistical Relational Learning is the smokers-friends-cancer example introduced in the [Markov Logic Networks paper (2006)](https://homes.cs.washington.edu/~pedrod/papers/mlj05.pdf).\n", "\n", "There are 14 people divided into two groups $\\{a,b,\\dots,h\\}$ and $\\{i,j,\\dots,n\\}$. \n", "- Within each group, there is complete knowledge about smoking habits. \n", "- In the first group, there is complete knowledge about who has and who does not have cancer. \n", "- Knowledge about the friendship relation is complete within each group only if symmetry is assumed, that is, $\\forall x,y \\ (friends(x,y) \\rightarrow friends(y,x))$. Otherwise, knowledge about friendship is incomplete in that it may be known that e.g.\\ $a$ is a friend of $b$, and it may be not known whether $b$ is a friend of $a$.\n", "- Finally, there is general knowledge about smoking, friendship and cancer, namely that smoking causes cancer, friendship is normally symmetric and anti-reflexive, everyone has a friend, and smoking propagates (actively or passively) among friends. \n", "\n", "One can formulate this task easily in LTN as follows." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import logging; logging.basicConfig(level=logging.INFO)\n", "import math\n", "\n", "import tensorflow as tf\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "\n", "import ltn" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "np.set_printoptions(suppress=True)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "pd.options.display.max_rows=999\n", "pd.options.display.max_columns=999\n", "pd.set_option('display.width',1000)\n", "pd.options.display.float_format = '{:,.2f}'.format\n", "\n", "def plt_heatmap(df, vmin=None, vmax=None):\n", " plt.pcolor(df, vmin=vmin, vmax=vmax)\n", " plt.yticks(np.arange(0.5,len(df.index),1),df.index)\n", " plt.xticks(np.arange(0.5,len(df.columns),1),df.columns)\n", " plt.colorbar()\n", " \n", "pd.set_option('precision',2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Language\n", "\n", "- LTN constants are used to denote the individuals. Each is grounded as a trainable embedding.\n", "- The `Smokes`, `Friends`, `Cancer` predicates are grounded as simple MLPs.\n", "- All the rules in the preamble are formulate in the knowledgebase." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2021-08-31 03:54:19.028589: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.036104: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.036720: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.037896: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 AVX512F FMA\n", "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", "2021-08-31 03:54:19.038389: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.038984: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.039528: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.630627: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.631271: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.631853: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:937] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", "2021-08-31 03:54:19.632393: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1510] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 13798 MB memory: -> device: 0, name: Tesla T4, pci bus id: 0000:00:1e.0, compute capability: 7.5\n" ] } ], "source": [ "embedding_size = 5\n", "\n", "g1 = {l:ltn.Constant(np.random.uniform(low=0.0,high=1.0,size=embedding_size),trainable=True) for l in 'abcdefgh'}\n", "g2 = {l:ltn.Constant(np.random.uniform(low=0.0,high=1.0,size=embedding_size),trainable=True) for l in 'ijklmn'}\n", "g = {**g1,**g2}" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "Smokes = ltn.Predicate.MLP([embedding_size],hidden_layer_sizes=(8,8))\n", "Friends = ltn.Predicate.MLP([embedding_size,embedding_size],hidden_layer_sizes=(8,8))\n", "Cancer = ltn.Predicate.MLP([embedding_size],hidden_layer_sizes=(8,8))" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "friends = [('a','b'),('a','e'),('a','f'),('a','g'),('b','c'),('c','d'),('e','f'),('g','h'),\n", " ('i','j'),('j','m'),('k','l'),('m','n')]\n", "smokes = ['a','e','f','g','j','n']\n", "cancer = ['a','e']" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "Not = ltn.Wrapper_Connective(ltn.fuzzy_ops.Not_Std())\n", "And = ltn.Wrapper_Connective(ltn.fuzzy_ops.And_Prod())\n", "Or = ltn.Wrapper_Connective(ltn.fuzzy_ops.Or_ProbSum())\n", "Implies = ltn.Wrapper_Connective(ltn.fuzzy_ops.Implies_Reichenbach())\n", "Forall = ltn.Wrapper_Quantifier(ltn.fuzzy_ops.Aggreg_pMeanError(p=2),semantics=\"forall\")\n", "Exists = ltn.Wrapper_Quantifier(ltn.fuzzy_ops.Aggreg_pMean(p=6),semantics=\"exists\")\n", "\n", "formula_aggregator = ltn.Wrapper_Formula_Aggregator(ltn.fuzzy_ops.Aggreg_pMeanError())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the knowledge-base is not satisfiable in the strict logical sense of the word.\n", "For instance, the individual $f$ is said to smoke but not to have cancer, which is inconsistent with the rule $\\forall x \\ (S(x) \\rightarrow C(x))$.\n", "Hence, it is important to adopt a probabilistic approach as done with MLN or a many-valued fuzzy logic interpretation as done with LTN." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# defining the theory\n", "@tf.function\n", "def axioms(p_exists):\n", " \"\"\"\n", " NOTE: we update the embeddings at each step\n", " -> we should re-compute the variables.\n", " \"\"\"\n", " p = ltn.Variable.from_constants(\"p\",list(g.values()))\n", " q = ltn.Variable.from_constants(\"q\",list(g.values()))\n", " axioms = []\n", " # Friends: knowledge incomplete in that\n", " # Friend(x,y) with x" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "axioms(p_exists=tf.constant(1.))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Training" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0: Sat Level 0.572\n", "Epoch 200: Sat Level 0.698\n", "Epoch 400: Sat Level 0.784\n", "Epoch 600: Sat Level 0.829\n", "Epoch 800: Sat Level 0.844\n", "Epoch 1000: Sat Level 0.851\n", "Epoch 1200: Sat Level 0.856\n", "Epoch 1400: Sat Level 0.856\n", "Epoch 1600: Sat Level 0.856\n", "Epoch 1800: Sat Level 0.857\n", "Training finished at Epoch 1999 with Sat Level 0.857\n" ] } ], "source": [ "trainable_variables = \\\n", " Smokes.trainable_variables \\\n", " + Friends.trainable_variables \\\n", " + Cancer.trainable_variables \\\n", " + ltn.as_tensors(list(g.values()))\n", "optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)\n", "\n", "for epoch in range(2000):\n", " if 0 <= epoch < 400:\n", " p_exists = tf.constant(1.)\n", " else:\n", " p_exists = tf.constant(6.)\n", " with tf.GradientTape() as tape:\n", " loss_value = 1. - axioms(p_exists=p_exists)\n", " grads = tape.gradient(loss_value, trainable_variables)\n", " optimizer.apply_gradients(zip(grads, trainable_variables))\n", " if epoch%200 == 0:\n", " print(\"Epoch %d: Sat Level %.3f\"%(epoch, axioms(p_exists=p_exists)))\n", "print(\"Training finished at Epoch %d with Sat Level %.3f\"%(epoch, axioms(p_exists=p_exists)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Results\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "df_smokes_cancer_facts = pd.DataFrame(\n", " np.array([[(x in smokes), (x in cancer) if x in g1 else math.nan] for x in g]),\n", " columns=[\"Smokes\",\"Cancer\"],\n", " index=list('abcdefghijklmn'))\n", "df_friends_ah_facts = pd.DataFrame(\n", " np.array([[((x,y) in friends) if x\n\n\n \n \n \n \n 2021-08-31T03:55:40.593596\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,3))\n", "plt.subplot(131)\n", "plt_heatmap(df_smokes_cancer_facts, vmin=0, vmax=1)\n", "plt.subplot(132)\n", "plt.title(\"Friend(x,y) in Group 1\")\n", "plt_heatmap(df_friends_ah_facts, vmin=0, vmax=1)\n", "plt.subplot(133)\n", "plt.title(\"Friend(x,y) in Group 2\")\n", "plt_heatmap(df_friends_in_facts, vmin=0, vmax=1)\n", "#plt.savefig('ex_smokes_givenfacts.pdf')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Querying all the truth-values using LTN after training: smokers and cancer (left), friendship relations (middle and right)." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-31T03:55:41.509422\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(12,3))\n", "plt.subplot(131)\n", "plt_heatmap(df_smokes_cancer, vmin=0, vmax=1)\n", "plt.subplot(132)\n", "plt.title(\"Friend(x,y) in Group 1\")\n", "plt_heatmap(df_friends_ah, vmin=0, vmax=1)\n", "plt.subplot(133)\n", "plt.title(\"Friend(x,y) in Group 2\")\n", "plt_heatmap(df_friends_in, vmin=0, vmax=1)\n", "#plt.savefig('ex_smokes_inferfacts.pdf')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Satisfiability of the axioms." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "forall p: ~Friends(p,p) : 1.00\n", "forall p,q: Friends(p,q) -> Friends(q,p) : 0.95\n", "forall p: exists q: Friends(p,q) : 0.80\n", "forall p,q: Friends(p,q) -> (Smokes(p)->Smokes(q)) : 0.78\n", "forall p: Smokes(p) -> Cancer(p) : 0.76\n" ] } ], "source": [ "print(\"forall p: ~Friends(p,p) : %.2f\" % Forall(p,Not(Friends([p,p]))).tensor)\n", "print(\"forall p,q: Friends(p,q) -> Friends(q,p) : %.2f\" % Forall((p,q),Implies(Friends([p,q]),Friends([q,p]))).tensor)\n", "print(\"forall p: exists q: Friends(p,q) : %.2f\" % Forall(p,Exists(q,Friends([p,q]))).tensor)\n", "print(\"forall p,q: Friends(p,q) -> (Smokes(p)->Smokes(q)) : %.2f\" % Forall((p,q),Implies(Friends([p,q]),Implies(Smokes(p),Smokes(q)))).tensor)\n", "print(\"forall p: Smokes(p) -> Cancer(p) : %.2f\" % Forall(p,Implies(Smokes(p),Cancer(p))).tensor)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can query unknown formulas." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "forall p: Cancer(p) -> Smokes(p): 0.96\n", "forall p,q: (Cancer(p) or Cancer(q)) -> Friends(p,q): 0.22\n" ] } ], "source": [ "print(\"forall p: Cancer(p) -> Smokes(p): %.2f\" % Forall(p,Implies(Cancer(p),Smokes(p)),p=5).tensor)\n", "print(\"forall p,q: (Cancer(p) or Cancer(q)) -> Friends(p,q): %.2f\" % Forall((p,q), Implies(Or(Cancer(p),Cancer(q)),Friends([p,q])),p=5).tensor)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualize the embeddings" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler\n", "from sklearn.decomposition import PCA" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "x = [c.tensor.numpy() for c in g.values()]\n", "x_norm = StandardScaler().fit_transform(x)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "pca = PCA(n_components=2)\n", "pca_transformed = pca.fit_transform(x_norm)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "var_x = ltn.Variable(\"x\",x)\n", "var_x1 = ltn.Variable(\"x1\",x)\n", "var_x2 = ltn.Variable(\"x2\",x)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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jh07RnR0NM888wyPPvooDRo0sK1Est/52TEnjNlsttnk4+NDv379+OCDD0hNTSU8PDzfeAt3cfnyZe68807Wrl3LtGnTeOYZSyCb1eaCxEtOTg5nzpwhMTGR06dPc+bMmXynbjIzM53O9/PzIzY2lho1alCrVi3at2/vJEash+P7k5yczPbt29m2bRtr165l27Zt7N+/33a9rMHSAwcOtImUevXqFZo0D1x81q8dqoWKRuPlSMB1SIDraXh3UMKpIpRSF4FBLspPYAnetS9bDCwuTvtauORSloIFLLEk06dPZ/PmzTzwwAP07ds3z/NPPvkk//nPf5gxYwZvvPFGkdvNysriwIEDNqFy+PBh20Z/DRo0oHfv3jahEhISUmy7N2/eTHBwMGazmTFjxjB//nzb65k7dy5Dhw61xUxYsQa+utpw0HFvJJPJRO/evXn33Xf5+eefufPOO8s0buT06dP07duXPXv2sGDBAkaMGIHZbOb8+fOcPn2a06dPc/bsWZKSklwKkosXL7pst2rVqjbB0bVr13zFSHR0dJECec+dO8emTZtsXpRt27Zx5MgR2/N169alffv23HPPPTaRUrNmzSJft7L+vGs0mkqAl+5VpPO4UD6i5f3332fLli08+OCD9OnTx2W9IUOGsG7dOk6ePJmvyMjMzGT//v02oXL06FFbkGzDhg1teVSaNm3qJCiKi8FgoHXr1pw+fZrU1FQCAwMZPnw4//vf/+jcuTOLFxcskh13pHb1ha2UIjs7m5o1azJ48GA+/vhjTCYTfn5+pc6L4jhVs3PnTj744APS09Np3749RqPRJlBcTdUEBwfbpmocj5iYGGrXrk3NmjWpXr06AQEBJbLRuiWCvUDZtm0bJ0+etNVp2LChTZx06NCBdu3aERMTU+L+rLj7s67zuGg03ktJ8rjU//gtp/Ljo5/z+H1+VXtcyuNXp9Fo5L333mPr1q089NBD3HbbbfnWHTduHIsXL+bzzz/n0UcfBSAjI4N9+/blESrWZGfXXHMNt99+O82bN6dJkybFCiwtiISEBGbPns2sWbM4ffo0kZGRTJ06lYcffpiqVavywAMPsHr16kI9I1ah4uiBsY8LERGCgoK49dZbbW3aiwjHYN6cnBybR6Sww5oYz5GYmBiMRiM1atSgbdu2eQRJbGysbSonPDzcZQxLSRPOWZP5bd26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JCQwZswY24obsCSLc5V91dUmeta4CXus0x9WT4T9El/HVTVHjhxh5syZzJ8/n7S0NDp06MCYMWMYPnx4iVavPPTQQ6xcuZKkpKR8r2eXLl0ICAhg/fr1xW7fFdbdpYcOHcratWvp2bMncCVANj8BEx8fT58+fTh//jwvvPACZrPZFpeSXyK39u3b065dO6pXr14k2+xz0NgLF08JBm8ULWU9VVSSMUZPFWk0FkoyVdTojXedyg+98EylmipqApisA0ouO4EejhVF5FHgUXd17K5fwEopEhIS8ggV6268UVFRtkRv1atXR0Q4efIkn376KUePHqVx48Z88MEHvPTSSzYxkpKS4tSHiBATE2MTHc2aNcs3kHXNmjXcfffd/Otf/2LQoEFObRkMBpYuXcqMGTNswbbDhg1jzJgxdOrUqVTXY/PmzXTs2LHANrp168aHH35Idna2W3LKKKW4+eabCQgIYMWKFTbhYi8YrAnqTpw4wY4dO/j+++/54osvMJlMmM1mXn75ZUTEFvjcrl072rZtS5s2bahSpUqJpnochYr1sSc8L94oWMqRIo0x7h5fNJqrFfHSqSJ3elxuAL5RStWwK/sHcJ9SqmcB55X4F1FpB3GlFKdOnWLPnj1s376dHTt2cP78ebKyshARgoODbQGfly5dsk3VmM3O72Z4eHi+6eEdU8UXddWJ0WjkmmuuoUGDBqxbt85WnpiYmCezbf369Xnsscd45JFHqFatWrGvgyNpaWlERkby8ssvM3ny5HzrLV68mCFDhvDbb7+5ZVdray6Xfv36kZCQwJ49ezCbzRw5coRt27blyZNiv2dQQEAAAwYMoEePHrRv3542bdo4LX22X40EV7xZRZnOc7Xnkn079n/LioogWMrB41LsMaag8eV84kVWz/2FcyfP06ZnK7oPvg7/AP+yMF2j8Tgl8bg0ftXZ43Lw5crlcUkDIhzKIoDUUre8axGsmQIppyCyDurml2071xY0iGdlZeWZqjl9+jT79+/nwIEDnDhxgrNnz5Kenk5WVpbLvWr8/f1tgqNevXq2jKzR0dH8/vvvXLp0iUcffZS+ffsSGhpa6pfpiJ+fH08++STPPfcc27dv5/Lly8yYMYMlS5ZgNBrp06cPH3/8MX379i31vj72bNu2DbPZnG98i5Vu3boBlkR07hAuJpOJAwcOEBsby08//USX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", "image/svg+xml": "\n\n\n \n \n \n \n 2021-08-31T03:55:43.650846\n image/svg+xml\n \n \n Matplotlib v3.4.2, https://matplotlib.org/\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(8,5))\n", "plt.subplot(221)\n", "plt.scatter(pca_transformed[:len(g1.values()),0],pca_transformed[:len(g1.values()),1],label=\"Group 1\")\n", "plt.scatter(pca_transformed[len(g1.values()):,0],pca_transformed[len(g1.values()):,1],label=\"Group 2\")\n", "names = list(g.keys())\n", "for i in range(len(names)):\n", " plt.annotate(names[i].upper(),pca_transformed[i])\n", "plt.title(\"Embeddings\")\n", "plt.legend()\n", "\n", "plt.subplot(222)\n", "plt.scatter(pca_transformed[:,0],pca_transformed[:,1],c=Smokes(var_x).tensor)\n", "plt.title(\"Smokes\")\n", "plt.colorbar()\n", "\n", "plt.subplot(224)\n", "plt.scatter(pca_transformed[:,0],pca_transformed[:,1],c=Cancer(var_x).tensor)\n", "plt.title(\"Cancer\")\n", "plt.colorbar()\n", "\n", "plt.subplot(223)\n", "plt.scatter(pca_transformed[:len(g1.values()),0],pca_transformed[:len(g1.values()),1],label=\"Group 1\")\n", "plt.scatter(pca_transformed[len(g1.values()):,0],pca_transformed[len(g1.values()):,1],label=\"Group 2\")\n", "res = Friends([var_x1,var_x2]).tensor.numpy()\n", "for i1 in range(len(x)):\n", " for i2 in range(i1,len(x)):\n", " if (names[i1] in g1 and names[i2] in g2) \\\n", " or (names[i1] in g2 and names[i2] in g1):\n", " continue\n", " plt.plot(\n", " [pca_transformed[i1,0],pca_transformed[i2,0]],\n", " [pca_transformed[i1,1],pca_transformed[i2,1]],\n", " alpha=res[i1,i2],c=\"black\")\n", "plt.title(\"Friendships per group\")\n", "plt.tight_layout()\n", "#plt.savefig(\"ex_smokes_embeddings.pdf\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "interpreter": { "hash": "e4ccb0efa59417244fa4c3b009ecf208b78a23eccf7fe2b73b3e70fcb96685f6" }, "kernelspec": { "display_name": "Python 3.9.6 64-bit ('tf-py39': conda)", "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 }