Proyectobayes garcia wha_miguel_angel

9
Materia: Inteligencia Artificial Maestro: Heidy Marisol Marín Castro Alumno: Miguel Ángel García Wha Matricula: [email protected] Fecha: 08 de marzo del 2016 Trabajo: Programa Bayes

Transcript of Proyectobayes garcia wha_miguel_angel

Page 1: Proyectobayes garcia wha_miguel_angel

Materia:

Inteligencia Artificial

Maestro:

Heidy Marisol Marín Castro

Alumno:

Miguel Ángel García Wha

Matricula:

[email protected]

Fecha:

08 de marzo del 2016

Trabajo:

Programa Bayes

Page 2: Proyectobayes garcia wha_miguel_angel

1. Descripción de la práctica El teorema de Bayes es un resultado enunciado por Thomas Bayes en 1763 que establece que si tenemos una hipótesis H sustentada para una evidencia E, entonces: p(H|E) = p(E|H)/p(E) Donde P(A) representa la probabilidad del suceso Ay p(A|B) denota la probabilidad del suceso P(A) condicionada al suceso P(B). En términos generales, el teorema de Bayes es de enorme relevancia puesto que vincula la probabilidad de E dado H con la probabilidad de H dado E. Una institución bancaria desea determinar si sus nuevos clientes serán buenos o malos en función de la información con la que ya dispone en una tabla como la siguiente: Dada la información completa de n clientes, la institución bancaria desea clasificar a sus m clientes nuevos como buenos o malos utilizando la regla de bayes, de modo que lo clasificará como bueno si la probabilidad de que dicho empleado sí sea bueno es mayor o igual que la probabilidad de que dicho empleado no sea bueno según la regla de bayes y como malo en caso contrario.

Page 3: Proyectobayes garcia wha_miguel_angel

2. Entrada La entrada será un entero n donde 1<= n <= 1000 seguido de n lineas cada una con 5 palabras separadas por espacios en el siguiente formato: edad hijos hace_ejercicio salario buen_cliente Donde: edad={joven, mayor} hijos={si, no} hace_ejercicio={si, no} salario={alto, medio, bajo} buen_cliente={si, no} Después de las lineas anteriores seguirá una línea con un entero m con 1 <= m <= 1000 seguida de m líneas con en el formato siguiente:

edad hijos hace_ejercicio salario Con las especificaciones antes indicadas para cada campo. Tu programa será ejecutado mediante una instrucción parecida a la siguiente línea de comando (dependiendo de lenguaje en que hayas realizado tu programa). ./Practica1 < Entrada.txt NOTA IMPORTANTE: Tu programa debe consistir sólo de un archivo fuente escrito en el lenguaje de tu preferencia, tal que si lo haces en Java, C++, C#, etc., todas las clases deben encontrarse en un sólo archivo fuente e incluir todas las librerias necesarias para su compilación.

3. Salida La salida serán m líneas con la palabra si o no, dependiendo de la respuésta para la i-ésima línea de entrada con 1 <= i <= m.

Page 4: Proyectobayes garcia wha_miguel_angel

4. Ejemplo de entrada 10 joven si no alto si joven no no medio no joven si si medio no joven si no bajo si mayor si no bajo si mayor no si medio si joven no si medio si joven si si alto si mayor si no medio si mayor no no bajo no 1 mayor no no medio

5. Ejemplo de salida No

6. Descripción del ejemplo Para el ejemplo dado tenemos que la probabilidad de que el cliente nuevo sea bueno dado que es mayor, no tiene hijos ni hace ejercicio y tiene un salario medio es igual a:

Donde tenemos por ejemplo que p(edadE = mayor|si) = 3/7 pues 3 de los clientes dados que son de edad mayor sí son buenos clientes y el número de clientes buenos es 7. Por otro lado p(si) = 7/10 pues de los 10 clientes dados 7 son buenos. Además tenemos que :

Para 0<= i <=1 con A0 = si y A1 = no. De modo que P(si) = 0;415 y P(no) = 0;585 por lo que la respuesta debe ser no.

Page 5: Proyectobayes garcia wha_miguel_angel

7. Programa código en java: package proyectoteoremabayes_angelwha;

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.text.DecimalFormat; import java.util.Scanner; public class TeoremaBayes_AngelWha { static String[][] informacion; static String[] info; static String val,nvoclie=""; static double [][] vec; static int col = 0,suma1=0,suma2=0,si=0,no=0; static double psi,pno,psie=1,pnoe=1,pe=0,probsi,probno; static int filas = 0; static Writer out; public static void main(String[] args) throws IOException { //String ruta = "C:\\Users\\AngelWha\\Documents\\"; String ruta = "C:\\Users\\AngelWha\\Documents\\NetBeansProjects\\ProyectoTeoremaBayes_AngelWha\\src\\proyectoteoremabayes_angelwha\\"; LeerArchivoTxt(ruta + "BaseConocimiento_Clientes_AngelWha.txt"); informacion = new String[filas][col]; System.out.println(filas+"--"+col); info=new String[col]; vec=new double [2][col]; DecimalFormat df = new DecimalFormat("0.0000"); LLenarMatrizClientes(ruta + "BaseConocimiento_Clientes_AngelWha.txt"); for (int i = 0; i < filas; i++) { System.out.println(""); for (int j = 0; j < col; j++) { System.out.print("[" + informacion[i][j] + "]"); } } for (int i = 0; i < filas; i++) { if(informacion[i][col-1].replace("\n","").equals("si")){ si=si+1; } else if(informacion[i][col-1].replace("\n","").equals("no")){ no=no+1; }

Page 6: Proyectobayes garcia wha_miguel_angel

} probsi=(double)si/filas; probno=(double)no/filas; Scanner leer =new Scanner(System.in); col=col-1; //if(val !="A" && val !="Z" ){ for (int i = 0; i < col; i++) { System.out.println("\n"); System.out.println("Ingresa 5 datos en minusculas [edad],[hijos],[hace ejercicio],[salario]:"); val = leer.next(); val=val.replace("\n",""); info[i]=val; suma1=0; suma2=0; for (int j = 0; j < filas; j++) { if(info[i].equals(informacion[j][i])&& informacion[j][col].replace("\n","").equals("si")){ suma1=suma1+1; } if(info[i].equals(informacion[j][i])&& informacion[j][col].replace("\n","").equals("no")){ suma2=suma2+1; } } vec[0][i]=(double)suma1/si; vec[1][i]=(double)suma2/no; } for (int i = 0; i < col; i++) { psie=psie*vec[0][i]; pnoe=pnoe*vec[1][i]; } psie=psie*probsi; pnoe=pnoe*probno; pe=psie+pnoe; psi=psie/pe; pno=pnoe/pe; // }else{

Page 7: Proyectobayes garcia wha_miguel_angel

// System.out.println("Los datos son con letras mayusculas ingresa de nuevo:\n"); //} if (psi>pno){ System.out.println("Es un buen cliente: "+df.format(psi)); info[col]="si"; } else{ System.out.println("No es un buen cliente: "+df.format(pno)); info[col]="no"; } for(int i=0;i<=col;i++){ nvoclie=nvoclie+info[i]+","; } out=new BufferedWriter(new FileWriter(ruta + "BaseConocimiento_Clientes_AngelWha.txt",true)); out.append("\n"+nvoclie); out.close(); } private static void LLenarMatrizClientes(String name) throws FileNotFoundException, IOException { File file = new File(name); FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); StringBuilder stringBuffer = new StringBuilder(); String line; int filas2 = 0; while ((line = bufferedReader.readLine()) != null) { // System.out.println(line); String informacionDataSet[] = line.split("\\,"); col = informacionDataSet.length; for (int i = 0; i < col; i++) { informacion[filas2][i] = informacionDataSet[i]; } filas2++; } } private static void LeerArchivoTxt(String name) throws FileNotFoundException, IOException { File file = new File(name); FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); StringBuilder stringBuffer = new StringBuilder(); String line;

Page 8: Proyectobayes garcia wha_miguel_angel

while ((line = bufferedReader.readLine()) != null) { // System.out.println(line); String informacionDataSet[] = line.split("\\,"); col = informacionDataSet.length; filas++; } } }

8. Imágenes del programa:

Page 9: Proyectobayes garcia wha_miguel_angel