<jupyter_start><jupyter_text>Redes Bayesianas  INF-396 Introducción a la Ciencia de Datos  Autor: <NAME>Lenguaje: PythonTemas:    - Redes Bayesianas     - Inferencia Primero definiremos una red simple. La red define si cierto contenido, posiblemente dañino, en una red social debe ser eliminado de la red (R {1: contenido debe se eliminado, 0: no eliminado}) y si el usuario debe ser baneado (B {1: Usuario es baneado, 0: Usuario no es baneado}) utilizando la historia del usuario (H {1: Usuario ya fue baneado antes, 0: Usuario no ha sido baneado}), la salida de un modelo de machine learning que predice en base al texto del contenido si es que es dañino o no (M {1: Contenido dañino, 0: Contenido no dañino}) y la etiqueta de otros usuarios sobre si el contenido es dañino o no (U {1: Contenido dañino, 0: Contenido no dañino}). La red está definida por las siguientes CPD:- P(U=1) = 0.15- P(M=1) = 0.05- P(H=1) = 0.1- P(B=1|H=1,R=1) = 0.4 - P(B=1|H=0,R=1) = 0.05 - P(B=1|H=1,R=0) = 0.12- P(B=1|H=0,R=0) = 0.02- P(R=1|M=1,H=1,U=1) = 0.95 - P(R=1|M=1,H=1,U=0) = 0.90 - P(R=1|M=1,H=0,U=1) = 0.85 - P(R=1|M=1,H=0,U=0) = 0.76 - P(R=1|M=0,H=1,U=1) = 0.18 - P(R=1|M=0,H=1,U=0) = 0.06 - P(R=1|M=0,H=0,U=1) = 0.14 - P(R=1|M=0,H=0,U=0) = 0.04IndependenciasListe todas las independencias locales y liste todas las independencias markovianas globales para la variable R.Conteste las siguientes consultas:1. Encuentre la probabilidad de que cualquier contenido deba ser eliminado de la plataforma.2. Encuentre la probabilidad de que el modelo deba ser removido de la plataforma dado que el modelo de machine learning lo etiquetó como dañino. ¿Cual es el patrón de razonamiento?3. Encuentre la probabilidad de que el modelo haya sido etiquetado cómo dañino por otro usuario dado que se sabe que fué removido. ¿Cual es el patrón de razonamiento?4. Encuentre la probabilidad de que el modelo haya sido etiquetado cómo dañino por otro usuario dado que se sabe fué removido y el modelo lo etiquetó cómo dañino. ¿Cual es el patrón de razonamiento?5. Encuentre la probabilidad de que el usuario haya sido baneado anteriormente dado que se sabe que su contenido fué removido y que el modelo etiquetó el contenido cómo dañino. ¿Cual es el patrón de razonamiento?<jupyter_code>#importamos librerías necesarias
from pgmpy.models import BayesianModel
from pgmpy.factors.discrete import TabularCPD
import networkx as nx
import matplotlib.pyplot as plt
from pgmpy.inference import VariableElimination<jupyter_output>/home/leicasdayz/anaconda3/lib/python3.7/site-packages/torch/cuda/__init__.py:52: UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at  /pytorch/c10/cuda/CUDAFunctions.cpp:100.)
  return torch._C._cuda_getDeviceCount() > 0<jupyter_text>Creamos la red<jupyter_code>model = BayesianModel([('U', 'R'), ('M', 'R'), ('H', 'R'), ('H', 'B'), ('R','B')])
## Definimos las CPD de acuerdo a la información dada

cpd_u = TabularCPD(variable='U', variable_card=2, values=[[0.85], [0.15]]) # [P(U=0),P(U=1)]
cpd_m = TabularCPD(variable='M', variable_card=2, values=[[0.95], [0.05]])
cpd_h = TabularCPD(variable='H', variable_card=2, values=[[0.9], [0.1]])

cpd_r = TabularCPD(variable='R', variable_card=2, 
                         #M0,H0,U0  M0,H0,U1  M0,H1,U0  M0,H1,U1  M1,H0,U0  M1,H0,U1  M1,H1,U0  M1,H1,U1
                   values=[[0.96,     0.86,     0.94,     0.82,     0.24,     0.15,     0.10,       0.05],
                           [0.04,     0.14,     0.06,     0.18,     0.76,     0.85,     0.90,       0.95]],
                  evidence=['M', 'H', 'U'],
                  evidence_card=[2, 2, 2])

cpd_b = TabularCPD(variable='B', variable_card=2, 
                           #H0,R0 H0,R1 H1,R0 H1,R1 
                   values=[[0.98, 0.95, 0.88, 0.6],
                           [0.02, 0.05, 0.12, 0.4]],
                  evidence=['H', 'R'],
                  evidence_card=[2, 2])

model.add_cpds(cpd_u, cpd_m, cpd_h, cpd_r, cpd_b)
print(cpd_u)
# Chequeo si el modelo es válido
model.check_model()<jupyter_output><empty_output><jupyter_text>Plot<jupyter_code># PLOT  de la red
nx.draw(model, with_labels=True)
plt.show()<jupyter_output><empty_output><jupyter_text>Independencias Locales<jupyter_code>#independencias locales
model.local_independencies(['U', 'M', 'H', 'R', 'B'])<jupyter_output><empty_output><jupyter_text>Independencias Globales de Markov<jupyter_code>print(model.active_trail_nodes('R'))<jupyter_output>{'R': {'B', 'M', 'R', 'U', 'H'}}<jupyter_text>Es claro que R no puede ser independiente a ninguna variable, ya que tiene una relación directa con todas las otras variables.  Consultas  1.1<jupyter_code>infer = VariableElimination(model)
g_dist = infer.query(['R'])
print(g_dist)<jupyter_output>Finding Elimination Order: : 100%|██████████| 4/4 [00:00<00:00, 507.51it/s]
Eliminating: M: 100%|██████████| 4/4 [00:00<00:00, 66.12it/s]<jupyter_text>La probabilidad de que cualquier contenido sea eliminado de la plataforma (R=1) es 0.0938  1.2<jupyter_code>print(infer.query(['R'], evidence={'M': 1}))<jupyter_output>Finding Elimination Order: : 100%|██████████| 3/3 [00:00<00:00, 197.13it/s]
Eliminating: H: 100%|██████████| 3/3 [00:00<00:00, 85.88it/s]<jupyter_text>La probabilidad de que el contenido deba ser eliminado dado que el modelo de ML lo etiquetó como dañino es 0.7869  1.3<jupyter_code>print(infer.query(['U'], evidence={'R': 1}))<jupyter_output>Finding Elimination Order: : 100%|██████████| 3/3 [00:00<00:00, 459.50it/s]
Eliminating: M: 100%|██████████| 3/3 [00:00<00:00, 93.63it/s]<jupyter_text>La probabilidad de que el contenido haya sido etiquetado como dañino por otro usuario, dado que se sabe fue removido es 0.2876  1.4<jupyter_code>print(infer.query(['U'], evidence={'R': 1,'M':1}))<jupyter_output>Finding Elimination Order: : 100%|██████████| 2/2 [00:00<00:00, 162.59it/s]
Eliminating: H: 100%|██████████| 2/2 [00:00<00:00, 84.04it/s]<jupyter_text>La probabilidad de que el contenido haya sido etiquetado como dañino por otro usuario, dado que se sabe fue removido y el modelo de ML lo etiquetó como dañino es 0.1639  1.5<jupyter_code>print(infer.query(['H'], evidence={'R': 1,'M':1}))<jupyter_output>Finding Elimination Order: : 100%|██████████| 2/2 [00:00<00:00, 407.43it/s]
Eliminating: B: 100%|██████████| 2/2 [00:00<00:00, 182.14it/s]
{'fraction_non_alphanumeric': 0.15406118962571827, 'fraction_numerical': 0.0717502717813325, 'mean_word_length': 4.357737104825291, 'pattern_counts': {'":': 0, '<': 45, '<?xml version=': 0, '>': 36, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '295524', 'license': 'Apache-2.0', 'n_tokens_mistral': 2924, 'n_tokens_neox': 2650, 'n_words': 690, 'path': 'Aprendizaje Supervisado/Otros/Bayesian_Networks.ipynb', 'repo_name': 'franciscoandrades/Portafolio', 'size': '6451'}