Construcción de un sistema experto de tipo probabilístico (página 2)
Los pasos fundamentales para elaborar el sistema son los
siguientes:- Identificar los conjuntos que
intervienen. - Cargar la base de conocimiento.
- Calcular las probabilidades conocidas.
- Calcular las probabilidades
condicionales. - Identificar a que rama del árbol o conjunto,
pertenece la característica en consulta. - Actualizar la base de conocimiento.
Para esto es clave determinar el número de
particiones m disjuntas del espacio muestral y el
numero n de eventos asociados, el espacio
generado por estos números se pueden representar
más fácilmente por un diagrama de árbol que
contenga todas las posibles regiones del conjunto, así
la forma de representar la figura 1 es la siguiente:Este diagrama es clave por que es una
representación bastante clara de los conjuntos, que
intervienen en el sistema, además hace una lista de
todos las posibles regiones del espacio muestral por ejemplo
la primera rama del conjunto, es la región
, la segunda es y la
ultima , cada uno de estos conjuntos tiene
un cardinal.Todos estos conjuntos representan la base de
conocimientos del experto, el número de conjuntos que
debe aparecer es .- Identificar los conjuntos que intervienen
Es claro que los conjuntos ya están definidos,
sabemos cuales son y cuantos son ahora procedemos a asignar a
cada conjunto su cardinal, o lo mismo que cargar la base de
conocimiento. Sea el cardinal del
conjunto , entonces la asignación se
hace siguiendo el siguiente esquema:…
Para k=1,2,3,…, .
- Cargar la base de conocimiento
Para calcular estas probabilidades es importante
determinar el tamaño del espacio muestral, teniendo en
cuenta que los conjuntos que fueron descritos anteriormente,
forman una partición del mismo, sea
el tamaño del espacio entonces
se puede determinar de la siguiente manera
siguiente forma:Para calcular las probabilidades de cada conjunto se
efectúa lo siguiente:…
Para k=1, 2,3,…,
yComo los datos suministrados dan
información acerca de
las particiones, pero no brindan información acerca de
los conjuntos en concreto, es necesario
calcular el tamaño de los conjuntos, el tamaño de
los se calcula sumando los conjuntos donde
aparece de la siguiente manera:,,,…,
La probabilidad de los
, se calcula de la siguiente forma
, Con Para
calcular las probabilidades de la forma
se hace lo siguiente:Finalmente es así como se calculan las
probabilidades conocidas. - Calcular las probabilidades conocidas.
En este punto del trabajo es donde se hace
importante el uso de las probabilidades condicionales, para
encontrarlas se hace uso de la regla Generalizada de Bayes
que se enuncio al principio. - Calcular las probabilidades
condicionales. - Clasificar a que rama del árbol o conjunto
pertenece la consulta
Para esto solo se sigue el camino en el árbol
haciendo las preguntas, la pregunta puede estar más
relacionada dependiendo del contexto en el que se elabore el
sistema, esto se vera más detalladamente mas adelante, por
ahora y de manera general se expresara esto como:
- Pregunta a priori, sospecha que el elemento pertenece
al conjunto . - Pregunta sobre los hechos asociados al sistema, el
elemento pertenece al conjuntó
De esa forma se clasifica, luego al tener identificado
que conjunto es, se retorna la probabilidad específica,
determinada por los procesos
anteriores.
- Actualizar la base de conocimiento
Después de todo el proceso probablistico, la
situación que se este analizando tiene que arrojar un
resultado final (posteriori), por ejemplo si se analiza un
juego de cartas hacemos todos los estudios
y generamos, las probabilidades correspondientes de todas formas
el fenómeno arroja un resultado que puede que haya sido o no
de acuerdo con las predicciones hechas por nosotros, puede que
haya dos tipos de errores uno es que el suceso ocurra cuando las
predicciones arrojaron que no, y el otro es que el suceso no
ocurra cuando los estudios arrojaron que si iba a ocurrir. De
todas formas así el suceso se haya dado o no el sistema
actualiza correspondientemente , sumando uno al conjunto que se
trato o la rama del árbol en cuestión, todo depende de
el punto de vista que le parezca mas cómodo al
lector.
Para ver como se construye el sistema experto, e
ilustrar la toma de decisiones bayesiana en
condiciones de incertidumbre, se va a tomar como base el
siguiente ejemplo.
Ejemplo "Determinar si un paciente tiene la
enfermedad adenocarcinoma gástrico"
Suponiendo que un medico por datos previos que le
suministra un paciente , tiene la sospecha que este padece
adenocarcinoma gástrico y que en función de estos datos,
estima que el paciente tiene una probabilidad de 0.7 de padecer
la enfermedad, y una del 0.3 de no padecerla, por lo tanto decide
interrogarle para tener mayor conocimiento de la enfermedad.
[1]
Gráfico 1
Para familiarizar al lector, con la construcción del ejemplo,
se tiene que lo que en el modelo general forma la
partición del espacio, o el conjunto , para el
caso m=2,luego se tiene que:
: Es el conjunto de pacientes que presentan
adenocarcinoma gástrico "área gris del dibujo".
: Es el conjunto de pacientes que no presentan
adenocarcinoma gástrico o lo mismo que
"área blanca del dibujo".
Además se tiene el evento , donde se
tiene que n =3, por lo tanto:
: Es el conjunto de pacientes presentan
dolor.
: Es el conjunto de
pacientes con perdida de peso.
: Es el conjunto de
pacientes paciente tienen vómitos.
Construcción del
sistema
1) Identificar los posibles conjuntos que intervienen
en el problema.
Para el caso como es claro ver en la representación
del espacio, ningún subconjunto de este es vació por lo
tanto los conjuntos que intervienen se pueden determinar mediante
un diagrama de árbol, como sigue:
Donde se puede ver los conjuntos que interactúan,
por ejemplo la primera rama se representa por: y la ultima por
.
2) Cargar la base de conocimiento:
Dado que se conocen los conjuntos por el paso anterior, se
asigna a cada conjunto su cardinal, en el caso de ser 0, para
algún Ai se dice que este conjunto no es relevante, y
no se incluye, para el ejemplo que estamos trabajando la base de
conocimiento se cargo en la siguiente sección del código.
Base de conocimiento del
ejemplo
Los valores de cada conjunto
representan el conjunto de conocimientos del
medico.
3) Calcular las probabilidades
conocidas: para obtener las probabilidades condicionales
, se deben
calcular primero las probabilidades conocidas , por ejemplo para
calcular , se
efectúa el cálculo de lo siguiente
.
Esto se hace calculando la probabilidad de dichas
intersecciones de dado que ocurrió el evento , lo que en el código es:
/* P(A1/B)*/
float PA1B=0;
PA1B=(probabilidad_conjunto[0]+probabilidad_conjunto[1]+probabilidad_conjunto[2]+probabilidad_conjunto[3])/PB;;
cout<<"ttLa probabilidad de P(A1/B)
es"<<PA1B<<"n";
/* P(A1/BC)*/
float PA1BC=0;
PA1BC=(probabilidad_conjunto[10]+probabilidad_conjunto[11]+probabilidad_conjunto[8]+probabilidad_conjunto[9])/PBC;
cout<<"ttLa probabilidad de P(A1/BC)
es"<<PA1BC<<"n";
/* P(A2/B)*/
float PA2B=0;
PA2B=(probabilidad_conjunto[0]+probabilidad_conjunto[1]+probabilidad_conjunto[4]+probabilidad_conjunto[5])/PB;
cout<<"ttLa probabilidad de P(A2/B)
es"<<PA2B<<"n";
/* P(A2/BC)*/
float PA2BC=0;
PA2BC=(probabilidad_conjunto[8]+probabilidad_conjunto[9]+probabilidad_conjunto[12]+probabilidad_conjunto[13])/PBC;
cout<<"ttLa probabilidad de P(A2/BC)
es"<<PA2BC<<"n";
/* P(A3/B)*/
float PA3B=0;
PA3B=(probabilidad_conjunto[0]+probabilidad_conjunto[2]+probabilidad_conjunto[6]+probabilidad_conjunto[4])/PB;
cout<<"ttLa probabilidad de P(A3/B)
es"<<PA3B<<"n";
/* P(A3/BC)*/
float PA3BC=0;
PA3BC=(probabilidad_conjunto[10]+probabilidad_conjunto[8]+probabilidad_conjunto[12]+probabilidad_conjunto[14])/PBC;
cout<<"ttLa probabilidad de P(A3/BC)
es"<<PA3BC<<"n";
Para lo cual hace uso de los conocimientos que tiene
representados en la grafica 1.En el sistema desarrollado la base
de conocimiento inicial viene dada en la sección:
De la anterior información se tiene que:
- Experimenten perdida de peso el 90% de los pacientes
de los pacientes con adenocarcinoma gástrico y el 40% de
los pacientes sin adenocarcinoma gástrico. - Experimentan dolor el 70% de los pacientes con
adenocarcinoma gástrico y el 10% de los pacientes sin
adenocarcinoma gástrico. - Tienen vómitos el 50% de los pacientes con
adenocarcinoma gástrico y el 30% de los pacientes sin
adenocarcinoma gástrico.
Datos que en el código del programa se calculan como
sigue:
/* P(A1/B)*/
float PA1B=0;
PA1B=(probabilidad_conjunto[0]+probabilidad_conjunto[1]+probabilidad_conjunto[2]+probabilidad_conjunto[3])/PB;
cout<<"ttLa probabilidad de P(A1/B)
es"<<PA1B<<"n";
/* P(A1/BC)*/
float PA1BC=0;
PA1BC=(probabilidad_conjunto[10]+probabilidad_conjunto[11]+probabilidad_conjunto[8]+probabilidad_conjunto[9])/PBC;
cout<<"ttLa probabilidad de P(A1/BC)
es"<<PA1BC<<"n";
/* P(A2/B)*/
float PA2B=0;
PA2B=(probabilidad_conjunto[0]+probabilidad_conjunto[1]+probabilidad_conjunto[4]+probabilidad_conjunto[5])/PB;
cout<<"ttLa probabilidad de P(A2/B)
es"<<PA2B<<"n";
/* P(A2/BC)*/
float PA2BC=0;
PA2BC=(probabilidad_conjunto[8]+probabilidad_conjunto[9]+probabilidad_conjunto[12]+probabilidad_conjunto[13])/PBC;
cout<<"ttLa probabilidad de P(A2/BC)
es"<<PA2BC<<"n";
/* P(A3/B)*/
float PA3B=0;
PA3B=(probabilidad_conjunto[0]+probabilidad_conjunto[2]+probabilidad_conjunto[6]+probabilidad_conjunto[4])/PB;
cout<<"ttLa probabilidad de P(A3/B)
es"<<PA3B<<"n";
/* P(A3/BC)*/
float PA3BC=0;
PA3BC=(probabilidad_conjunto[10]+probabilidad_conjunto[8]+probabilidad_conjunto[12]+probabilidad_conjunto[14])/PBC;
cout<<"ttLa probabilidad de P(A3/BC)
es"<<PA3BC<<"n";
Con base en el ejemplo, el medico va conociendo
sucesivamente los datos:
- Los datos iniciales antes de las preguntas que
formula el medico. - Si el enfermo tiene vómitos.
- Si el enfermo experimenta perdida de
peso. - Si el enfermo tiene dolor.
Con los datos que va conociendo el medico, va
determinando unas nuevas probabilidades de que el paciente tenga
la enfermedad.
El caso particular que se va a ver es el de un paciente
que inicialmente, en una exploración anterior se le
diagnostico, adenocarcinoma gástrico con una probabilidad de
0.7, pero el medico considera que esto no es suficiente ya que
tiene una probabilidad de 0.3 de equivocarse por tanto decide
hacer las preguntas mencionadas anteriormente a lo cual el
paciente del ejemplo responde lo siguiente.
- Probabilidad de 0.7 de tener la
enfermedad. - El paciente no presenta vómitos.
- El enfermo presenta perdida de peso.
- El enfermo tiene dolor.
Para el caso tenemos que dada una serie de síntomas
A1, A2 y A3 se determina si el paciente tiene o no
la enfermedad tal evento se ve representado por B. Para
ubicar el trabajo en el contexto la
probabilidad condicional viene dada por eventos diyuntos
relacionados en este caso tener o no adenocarcinoma gástrico
y un evento común a estos, para el caso no se tiene un
solamente un evento común si no 3, que son los síntomas
entonces la pregunta que se busca contestar es dada cualquier
combinación, posible de los síntomas poder determinar de una forma
mas acertada, que probabilidad tiene el paciente de tener la
enfermedad.
4) Calcular las probabilidades
condicionales.
Para esto se toma P(B)=0.70 que es la primera
estimación dada por el medico, con base en los síntomas
manifestados por el paciente se diría que este pertenece al
conjunto . Se calculan las probabilidades como
sigue:
Para el caso la probabilidad inicial de B es 0.7 por lo
tanto por medio de la regla de Bayes se tiene que, la
probabilidad que el paciente tenga la enfermedad, dado que no
presenta vómitos o lo que simbólicamente se escribe
como se calcula como sigue.
Por la teoría de la probabilidad
tenemos que:
Las deducciones obtenidas dan una nueva probabilidad de
que el paciente tenga adenocarcinoma gástrico, por lo tanto
la probabilidad de tener la enfermedad dado este síntoma,
sufre un cambio ya que ahora
, lo mismo su complemento estas nuevas
probabilidades son usadas para el siguiente
cálculo:
Este cálculo determina que dado que un paciente no
tiene vómitos y presenta perdida de peso su nueva
probabilidad de tener la enfermedad es 0.7895.
En el paso anterior se tiene que un paciente que, en un
principio se determinó que tenia, adenocarcinoma
gástrico, que además no presenta vómitos, pero
presenta perdida de peso y dolor tiene una probabilidad de 0.9634
de tener la enfermedad.
5) Clasificar a que rama del árbol o conjunto
pertenece la consulta
En el sistema se activa la selección hecha por el
usuario al responder como sigue:
//Opcion 5 ssns o Opcion 13
if((resp_0=='s'||resp_0=='n') && resp_1=='n'
&& resp_2=='s' && resp_3=='s'){
/* P1 /// P(B/A3C)*/
float PBA3C,PB1,PB1C;
/* (P(A3C/B)*P(B)) / [P(A3C/B)*P(B) +
P(A3C/BC)*P(BC)]*/
PBA3C=((1-PA3B)*(PB))/((1-PA3B)*(PB)+(1-PA3BC)*(PBC));
cout<<"ttLa probabilidad de P(B/A3C)
es"<<PBA3C<<"n";
PB1=PBA3C;
PB1C=1-PBA3C;
/* P2 /// P(B1/A2)*/
float PB1A2,PB2,PB2C;
/* (P(A2/B)*P(B1)) / [P(A2/B)*P(B1) +
P(A2/BC)*P(B1C)]*/
PB1A2=((PA2B)*(PB1))/((PA2B)*(PB1)+(PA2BC)*(PB1C));
cout<<"ttLa probabilidad de P(B1/A2)
es"<<PB1A2<<"n";
PB2=PB1A2;
PB2C=1-PB1A2;
/* P3 /// P(B2/A1)*/
float PB2A1,PB3,PB3C;
/* (P(A1/B)*P(B2)) / [P(A1/B)*P(B2) +
P(A1/BC)*P(B2C)]*/
PB2A1=((PA1B)*(PB2))/((PA1B)*(PB2)+(PA1BC)*(PB2C));
cout<<"ttLa probabilidad de P(B2/A1)
es"<<PB2A1<<"n";
PB3=PB2A1;
PB3C=1-PB2A1;
if(resp_0=='s'){
cout<<"nttDado que el doctor sospecha que usted
tiene A.G nttla probabilidad de que se encuentre enfermo
es:"<<PB3<<"n";}
Donde se puede ver como se hace el cálculo de las
probabilidades, según la selección del usuario. Como la
primera estimación se que se hace a prior es que el
paciente, tiene adenocarcinoma gástrico con una
probabilidad, de 0.7 hay otras a posteriori que se calculan en
base a los síntomas que el paciente manifiesta.
6) Actualizar la base de conocimiento
Pero el sistema no solo se queda con los datos a priori
suministrados por el medico, si no que a medida que va conociendo
nuevos casos y los resultados finales de estos a posteriori,
actualiza su propia base de conocimiento, este sistema
también lo hace en la siguiente sección del
código:
void refrescar_sistema(){
if(resultado_final=='s'){
// Opcion 1 sss
if(resp_1=='s' && resp_2=='s' &&
resp_3=='s'){
/*1 B_A1_A2_A3 */ personas_por_conjunto[0]++;
}
// Opcion 2 ssn
if(resp_1=='s' && resp_2=='s' &&
resp_3=='n'){
/*5 B_A1C_A2_A3 */
personas_por_conjunto[4]++;
}
// Opcion 3 sns
if(resp_1=='s' && resp_2=='n' &&
resp_3=='s'){
/*3 B_A1_A2C_A3 */
personas_por_conjunto[2]++;
}
// Opcion 4 snn
if(resp_1=='s' && resp_2=='n' &&
resp_3=='n'){
/*7 B_A1C_A2C_A3 */
personas_por_conjunto[6]++;
}
// Opcion 5 sns
if(resp_1=='n' && resp_2=='s' &&
resp_3=='s'){
/*2 B_A1_A2_A3C */
personas_por_conjunto[1]++;
}
// Opcion 6 nsn
if(resp_1=='n' && resp_2=='s' &&
resp_3=='n'){
/*6 B_A1C_A2_A3C */
personas_por_conjunto[5]++;
}
// Opcion 7 nns
if(resp_1=='n' && resp_2=='n' &&
resp_3=='s'){
/*4 B_A1_A2C_A3C */
personas_por_conjunto[3]++;
}
// Opcion 8 nnn
if(resp_1=='n' && resp_2=='n' &&
resp_3=='n'){
/*8 B_A1C_A2C_A3C */
personas_por_conjunto[7]++;
}
}
if(resultado_final=='n'){
// Opcion 1 sss
if(resp_1=='s' && resp_2=='s' &&
resp_3=='s'){
/*9 BC_A1_A2_A3 */
personas_por_conjunto[8]++;
}
// Opcion 2 ssn
if(resp_1=='s' && resp_2=='s' &&
resp_3=='n'){
/*13 BC_A1C_A2_A3 */
personas_por_conjunto[12]++;
}
// Opcion 3 sns
if(resp_1=='s' && resp_2=='n' &&
resp_3=='s'){
/*11 BC_A1_A2C_A3 */
personas_por_conjunto[10]++;
}
// Opcion 4 snn
if(resp_1=='s' && resp_2=='n' &&
resp_3=='n'){
/*15 BC_A1C_A2C_A3 */
personas_por_conjunto[14]++;
}
Según sea el caso.
Conclusiones
El sistema es realmente muy interesante de estudiar por
muchas razones, algunas ya fueron expuestas anteriormente, otras
se infieren al trabajar con el, en fin estos sistemas presentan una riqueza
mayor que los sistemas comunes basados en reglas, estos son muy
importantes ya que muestra las relaciones entre
eventos con carácter condicional, y
además de esto incluye con qué probabilidad puede que
se dé o no un evento, en este punto es clave el uso de la
regla de Bayes que es el eje central de este trabajo ya que
permite calcular todas las probabilidades que no conocemos, y no
solo eso también da una estructura para el desarrollo de las metodología planteada, para
la construcción del sistema. Aunque una de las mas
importantes características de este sistema es el dinamismo
de este mismo para aprender, ya que sus decisiones no solo se
soportan en la base de conocimiento original si no que a medida
que se usa y se actualiza, ésta deja de ser solo la original
propuesta por el experto, para convertirse en una base de
conocimiento afinada por la realidad o la experiencia.
Finalmente se concluye que estos sistemas, tienen un
gran potencial debido a la capacidad de explorar nuevos campos
que no se trabajaban con los sistemas tradicionales, debido a las
fortalezas que fueron ya mencionadas, pero como sabemos la
realidad es muy compleja y como todo, es posible hacer mejoras a
la forma en como trabajan estos.
Bibliografía:
[1] CASTILLO RON, ENRIQUE. Sistemas Expertos Aprendizaje e Incertidumbre,
Editorial Peraninfo. Capitulo 3 pagina 98, Madrid,1989.
[2] Walpole, Ronald &
Myers, Raymond H.& Myers Sharon. Probabilidad y
estadística. Editorial
Prentice Hall, capitulo 1, 1999.
[3] JOSEPH GIARRATANO ,GARY RILEY.Sistemas
Expertos Principios y Programación, Thomson
International,capitulo 4, 2000
Autor:
Camilo Eduardo Matson Hernandez
Estudiante de último semestre del Programa de
Matemáticas de la
Fundación Universitaria Konrad Lorenz.
Dirigido por:
Ing. Pervys Rengifo Rengifo
Docente del Programa de Ing. De Sistemas de la
Fundación Universitaria Konrad Lorenz.
Bogotá – Colombia, Noviembre de
2007.
Página anterior | Volver al principio del trabajo | Página siguiente |