• No se han encontrado resultados

4. Construcción de la Heurística Modelo de flor

4.2 Construcción

El modelo de flor recrea el proceso de auto similitud de un fractal, si hay relación entre los datos, esta relación debe de ser de una dimensión fractal. El conocimiento adquirido al revisar e implementar los demás aprendices ha permitido encontrar algunas peculiaridades propias para esta heurística.

Imagine entonces que es tarde y algo se aproxima hacia usted; puede considerar que existen las condiciones para reconocer el objeto por el sonido que hace, el olor que despide y finalmente por la forma que ve…

Proyecto de Investigación II Inteligencia Artificial Pag 60

Cuando tenemos un conjunto de entrenamiento lo que se hace es tratar de definir la forma o atributos para realizar una clasificación a través de un umbral o función de activación. Para un ser humano es posible reconocer diferentes formas de un mismo objeto primero identificando una silueta y luego acercarse y tomar detalle las características menos visibles del objeto.

Diferentes niveles de información hacen que un atributo sea más o menos útil atendiendo a la premisa del peligro que supone, regresando a la metáfora anterior, si el sonido es parecido al rugido de un tigre, entonces lo más probable es que se trate de un tigre y se ocupan las otras características para comprobarlo.

Finalmente hay otro aspecto que es conveniente recalcar existe un error asociado en cada una de las observaciones hechas, pero en la naturaleza ese supuesto error nos da un margen de operatividad.

4.2.1 Diseño

Usando el concepto anteriormente expuesto:

Encontrar la ecuación dado un fractal o el comportamiento. Encontrar atractores.

Observaciones.

-Suponemos que los datos se comportan de forma fractal. -Al encontrar la ecuación encontramos el modelo.

-Podemos no encontrar la ecuación.

-Consideramos el error como un coeficiente de ajuste.

Paso 1. Calcular las estadísticas de acercamientos, como se ha divido en cada atributo en un posible indicador, se encontrara la relación más común entre los n datos, es decir todas las distancias entre elementos de manera que:

Paso 2. Calcular los atractores de la dimensión.

Paso 3. Usar los datos obtenidos en el conjunto de prueba en el conjunto de datos fuera del conjunto de prueba, si existen datos no vistos con antelación en el conjunto de prueba, se crea un nuevo atractor para cada dimensión.

Paso 4. Si se puede generalizar el comportamiento con una ecuación, entonces hemos acabado si no; utilizar los atractores para los datos

Proyecto de Investigación II Inteligencia Artificial Pag 61

4.2.2 Codificación

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.io.IOException; import java.util.ArrayList; Public class Archivo {

public ArrayList<Modelo> leerArchivo(String ruta)throws Exception{ ArrayList<Modelo> lista = new ArrayList<Modelo>();

//Se crea un objeto File usando el constructor que recibe la ruta(String) File archivo = new File (ruta);

//Usamos estos 2 objetos porque BufferedReader contiene un m�todo sencilo //Para leer el archivo por linea

FileReader fileReader = new FileReader (archivo);

BufferedReader buffReader = new BufferedReader(fileReader); String linea=null; int cont= 0; while((linea=buffReader.readLine())!=null){ try{ cont++; if(linea.length()>0){

String[] renglonTemporal = linea.split(",");

Modelo m = new Modelo(Double.valueOf(renglonTemporal[0]),

Double.valueOf(renglonTemporal[1]),Double.valueOf(renglonTemporal[2]), Double.valueOf(renglonTemporal[3]) ); lista.add(m); } }catch(Exception e){ System.out.println("ERROR "+ e.getMessage()); } //Modelo m = new Modelo(Double.valueOf(renglonTemporal[0]),Double.valueOf(renglonTemporal[1]),Double.valueOf(rengl onTemporal[2]),Double.valueOf(renglonTemporal[3])); //lista.add(m); }

//Se valida que no sea nulo y se cierra if( null != fileReader)

fileReader.close(); return lista;

} }

public class Modelo{

Proyecto de Investigación II Inteligencia Artificial Pag 62

private double dato2 = 0; private double dato3 = 0; private double dato4 = 0; private double media = 0;

public Modelo(double dato1,double dato2,double dato3,double dato4){ this.dato1=dato1;

this.dato2=dato2; this.dato3=dato3; this.dato4=dato4;

this.media = ( dato1 + dato2 + dato3 + dato4 ) / 4; }

@Override

public String toString() {

String salida= getDato1()+" "+getDato2()+" "+getDato3()+" "+getDato4()+" "+getMedia()+"\n";

return salida; }

void setDato1(double dato1){ this.dato1 = dato1;

}

void setDato2(double dato2){ this.dato2 = dato2;

}

void setDato3(double dato3){ this.dato3 = dato3;

}

void setDato4(double dato4){ this.dato4 = dato4; } double getDato1(){ return this.dato1; } double getDato2(){ return this.dato2; } double getDato3(){ return this.dato3; } double getDato4(){ return this.dato4; } double getMedia(){

this.media = ((getDato1() + getDato2() + getDato3() + getDato4())/4); return this.media;

}

public boolean compara( double b, double fractal) {

double baja = (getMedia() - (getMedia()*fractal)/2); double alta = (getMedia() + (getMedia()*fractal)/2); if( b < alta || b >baja)

return true; return false; }

}

Proyecto de Investigación II Inteligencia Artificial Pag 63

public class Atractor {

ArrayList<Modelo> listaAtractores = new ArrayList<Modelo>(); public double promedio(){

double acumulador=0;

for(Modelo x:this.listaAtractores){ acumulador+= x.getMedia(); }

double prom = acumulador/this.listaAtractores.size(); return prom; } } import java.io.IOException; import java.util.ArrayList; import java.util.List; public class Principal {

public static void main(String args[]) throws IOException, Exception { Archivo ar=new Archivo();

List<Modelo> listaPrueba = new ArrayList<Modelo>();

ArrayList<Atractor> listaAtractores = new ArrayList<Atractor>();

ArrayList<Modelo> lista = ar.leerArchivo("C:\\iris.data");

//en este ciclo se calculan los conjuntos de entrenamiento y prueba for(Modelo x:lista ){

double ale = Math.random()*100;

//criterio de aceptacion if(ale>68) listaEntrenamiento.add(x); else listaPrueba.add(x); }

//en este ciclo se llenan la lista de atractores double fractal = 1;

//inicia la lista de atractores

Atractor nuevoAtractor = new Atractor();

nuevoAtractor.listaAtractores.add(listaEntrenamiento.get(0)); listaAtractores.add(nuevoAtractor);

listaEntrenamiento.remove(0);

while(listaEntrenamiento.size()>0){

int tamListaAtractores = listaAtractores.size(); for(int i =0; i<tamListaAtractores; i++) {

double alta = listaAtractores.get(i).promedio() + (

(listaAtractores.get(i).promedio() * fractal ) / 2);

double baja = listaAtractores.get(i).promedio() - (

(listaAtractores.get(i).promedio() * fractal ) / 2);

if( listaEntrenamiento.get(0).getMedia() < alta &&

listaEntrenamiento.get(0).getMedia() > baja ){

listaAtractores.get(i).listaAtractores.add(listaEntrenamiento.get(0)); listaEntrenamiento.remove(0);

}else{

Atractor tempAtractor = new Atractor();

tempAtractor.listaAtractores.add(listaEntrenamiento.get(0)); listaAtractores.add(tempAtractor);

listaEntrenamiento.remove(0); break;

Proyecto de Investigación II Inteligencia Artificial Pag 64

} break; } }

System.out.println("Lista de entrenamiento tam= "+ listaEntrenamiento.size()); System.out.println("Lista de prueba tam= "+ listaPrueba.size());

System.out.println("Lista de atractores tam = "+listaAtractores.size());

while(listaPrueba.size()>0){

int tamListaAtractores = listaAtractores.size(); for(int i =0; i<tamListaAtractores; i++) {

double alta = listaAtractores.get(i).promedio() + (

(listaAtractores.get(i).promedio() * fractal ) / 2);

double baja = listaAtractores.get(i).promedio() - (

(listaAtractores.get(i).promedio() * fractal ) / 2);

if( listaPrueba.get(0).getMedia() < alta && listaPrueba.get(0).getMedia() > baja ){

listaAtractores.get(i).listaAtractores.add(listaPrueba.get(0)); listaPrueba.remove(0);

}else{

Atractor tempAtractor = new Atractor();

tempAtractor.listaAtractores.add(listaPrueba.get(0)); listaAtractores.add(tempAtractor); listaPrueba.remove(0); break; } break; } }

System.out.println("Lista de entrenamiento tam= "+ listaEntrenamiento.size()); System.out.println("Lista de prueba tam= "+ listaPrueba.size());

System.out.println("Lista de atractores tam = "+listaAtractores.size());

4.2.3 Implementación

Este código se usara en una PC con Windows 7 instalado, java 8 y se ejecutara sobre netbens.

Documento similar