Está en la página 1de 9

Aplicación de Red Bayesiana

USANDO BNT - MATLAB, CONSTRUIR LA RED BAYESIANA DE 5 NODOS VISTA


EN CLASES: U, V, X, Y, Z, CON SUS RESPECTIVAS TABLAS DE
PROBABILIDADES
CONSULTAS:
1. P(+X/+Y)
2. P(+X/+Y AND +Z)
3. P(-X/-Y AND -Z)
4. P(+X/ +V)
5. P(-X/Uº)
6. P(Uº AND +Y/+X)
7. P(+Y AND +Z/+X)
8. P(Uº AND +V)
9. P(+X)
Codigo

function bayesiano

% Añadir paths (debe hacerse cada vez que se usa BNT)

cd C:\kmurphy\FullBNT\FullBNT-1.0.4

addpath(genpathKPM(pwd))

% Dimensión de la matriz adyacente

N = 5;

% Matriz definidora del grafo (inicialmente ceros)

dag = zeros(N,N);

% Numerar nodos topológicamente

U = 1;

V = 2;

X = 3;

Y = 4;

Z = 5;

%HM = 4;

% Fijar relaciones entre nodos, dado un nodo X, poner dag(X, [suc(X)]) = 1


dag(U,X)=1;

dag(V,X)=1;

dag(X, [Z Y]) = 1;

%dag(LL, HM) = 1;

%dag(AS, HM) = 1;

% Especificar el tipo de nodo (todos discretos)

discrete_nodes = 1 : N;

% Especificar el tamaño de los nodos (todos binarios)

node_sizes = [3 2 2 2 2];

% CONSTRUIR LA RED BAYESIANA

bnet = mk_bnet(dag, node_sizes, 'discrete', discrete_nodes);

% Se puede consultar la ayuda para, por ejemplo, saber parámetros obligatorios y opcionales

% help mk_bnet

% Opcionalmente se asigna nombres a los nodos

bnet = mk_bnet(dag, node_sizes, 'names', {'LUGAR DE ORIGEN','TIPO


SANGUINEO','PALUDISMO','GOTA GRUESA','FIEBRE'});

% Mostrar el grafo

%draw_graph(dag);

% Referirse a los nodos por sus nombres

X = bnet.names('PALUDISMO')

% Introducir las TABLAS DE PROBABILIDADES CONDICIONADAS (CPD)

bnet.CPD{U} = tabular_CPD(bnet, U, [0.8 0.1 0.1]);

bnet.CPD{V} = tabular_CPD(bnet, V, [0.6 0.4]);

bnet.CPD{X} = tabular_CPD(bnet, X, [0.9 0.7 0.5 0.4 0.2 0 0.1 0.3 0.5 0.6 0.8 1]);

bnet.CPD{Y} = tabular_CPD(bnet, Z, [0.95 0.07 0.05 0.93]);

bnet.CPD{Z} = tabular_CPD(bnet, Y, [0.94 0.08 0.06 0.92]);

%bnet.CPD{HM} = tabular_CPD(bnet, HM, [1 0.1 0.1 0.01 0 0.9 0.9 0.99]);

% Especificar el motor de inferencia

engine = jtree_inf_engine(bnet);
% CONSULTAS

% CONSULTA 1. P(+X/+Y)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{Y} = 2;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 1')

marg = marginal_nodes(engine, X);

marg.T;

p=marg.T(2)

% CONSULTA 2. P(+X/+Y AND +Z)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{Y} = 2;

evidence{Z} = 2;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 2')

marg = marginal_nodes(engine, X);

marg.T;

p=marg.T(2)

%p = marg.T(2)
% Graficamos diagrama de barras de la marginal

% bar(marg.T)

% CONSULTA 3. P(-X/-Y AND -Z)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{Y} = 1;

evidence{Z} = 1;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 3')

m = marginal_nodes(engine, X);

%disp('Distribución de probabilidad conjunta:')

m.T;

p=m.T(1)

% CONSULTA 4. P(+X/ +V)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{V} = 1;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 4')

m = marginal_nodes(engine, X);

%disp('Distribución de probabilidad conjunta:')


m.T;

p=m.T(2)

% CONSULTA 5. P(-X/Uº)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{U} = 2;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 5')

m = marginal_nodes(engine, X);

%disp('Distribución de probabilidad conjunta:')

m.T;

p=m.T(1)

% CONSULTA 6. P(Uº AND +Y/+X)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{X} = 2;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 6')

m = marginal_nodes(engine, U);

%disp('Distribución de probabilidad conjunta:')

m.T;

p1=m.T(2);
% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{X} = 2;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

m = marginal_nodes(engine, Z);

%disp('Distribución de probabilidad conjunta:')

m.T;

p2=m.T(2);

prob= p1*p2

% CONSULTA 7. P(+Y AND +Z/+X)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{X} = 2;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 7')

m = marginal_nodes(engine, Y);

%disp('Distribución de probabilidad conjunta:')

m.T;

p11=m.T(2);
% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 2. Introducir evidencia

evidence{X} = 2;

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

m = marginal_nodes(engine, Z);

%disp('Distribución de probabilidad conjunta:')

m.T;

p22=m.T(2);

prob= p11*p22

% CONSULTA 8. P(Uº AND +V)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 8')

m = marginal_nodes(engine, U);

%disp('Distribución de probabilidad conjunta:')

m.T;

p111=m.T(2);

% CONSULTA 8. P(U0 AND +V)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);


% 4. Calcular la probabilidad marginal

m = marginal_nodes(engine, V);

%disp('Distribución de probabilidad conjunta:')

m.T;

p222=m.T(2);

Pr=p111*p222

% CONSULTA 9. P(+X)

% 1. Inicializar el vector de evidencias

evidence = cell(1, N);

% 3. Insertar la evidencia en el motor de inferencia

[engine, loglik] = enter_evidence(engine, evidence);

% 4. Calcular la probabilidad marginal

disp('CONSULTA 9')

m = marginal_nodes(engine, X);

%disp('Distribución de probabilidad conjunta:')

m.T;

p=m.T(2)

end
Resultados

También podría gustarte