Construcción de un sistema experto de tipo probabilístico (página 2)
Enviado por Pervys Rengifo Rengifo
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,…, y
Como 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 |