[PYTHON] ¿Se pueden crear árboles de decisión con funciones y condicionales?

Iniciado por Yidu, 6 Diciembre 2014, 14:13 PM

0 Miembros y 1 Visitante están viendo este tema.

Yidu

Seguramente se podrá hacer. Pero la mayoría de ejemplos que veo por la red, utilizan el paradigma de POO. Y antes de llegar a dicho paradigma de programación utilizo la funcional.

Se trataría de crear un árbol de decisión o alguno mas simple (por ejemplo árbol binario). Y además, que los datos que se fueran introduciendo se pudieran escribir y leer de un archivo. Es decir, para que nuestro código fuera aprendiendo.

¿Cómo se debería enfocar?

Esta el típico programa que hace de adivinador. Y que a medida que uno le introduce datos, estos se escriben en un archivo para luego no tener que teclearlos de nuevo.

En este enlace https://gist.github.com/adrigm/5330110 el usuario postea un código usando la POO. Me gustaría poder aprender como se haría igual usando IF, funciones, FOR, etc...

Por cierto, no es un trabajo que me hayan mandado hacer. Aprendo los ratos que puedo y por hobby. Gracias!

daryo

si se puede en python , no hay ninguna necesidad de usar objetos.EL programa que pusiste funciona con dos o tres animales maximo por eso es muy simple , si aprendiera ya es algo (mucho)mas complejo xD.

yo lo enfocaria de esta forma

supon que tienes una lista de animales marcados  con caracteristicas propias(solo de este) y generales(compartidas por muchos animales)por ejemplo si son acuaticos o terrestres esas serian compartidas por muchos animales hasta las mas especificas compartidas por unos pocos o ninguno por ejemplo si son "el mejor amigo del hombre xD"

Entonces las preguntas irian desde lo mas general a lo mas especifico descartando a los animanes que no poseen esas cualidades hasta llegar a las propias..

en caso de que el animal no exista entonces el usuario nos habra dado mucha informacion sobre este animal a medida que va contestando preguntas(cuando se han contestado todas las caracteristicas generales y no cumple ninguna de las propias sabremos que no existe xD)  

Asi que se guardarian todas las caracteristicas generales que respondio el usuario y se le pregunta por una propia del animal. para agregarlo a la base de datos

si por ejemplo el usuario dice "tiene alas" lo marcaremos dentro de los animales que poseen esta caracteristica. y asi con cada caracteristica general que nos dio el usuario , ademas de preguntarle una especifica
buenas

Yidu

Ok. Supongo que en ese caso, debería usar listas o diccionarios ¿No es así?

Y luego quedaría el asunto de como guardar los datos introducidos cuando cerrásemos el programa. Osea, que deberíamos ir escribiendo en un archivo todas las respuestas que fuéramos dando. Y cuando lo volviésemos a ejecutar, leyera el archivo y así poder continuar. No empezar de cero. De ese modo, cuando otra persona probara el programa, ya tendría una base de respuestas y animales considerable.


daryo

los diccionarios y listas si son utiles en este caso pero es cuestion de imaginacionj y como planees hacerlo xD (otra opcion interesante seria usar una base de datos como sqlite) yo pondria cada animal como una lista
Código (python) [Seleccionar]

animales=[gato,perro,ballena]
gato=[mamifero,terrestre,felino]
perro=[mamifero,terretre,canino]
ballena=[mamifero,acuatico,nose]

#opciones escogidas por el usuario:
opciones=[mamifero,acuatico,felino]
existe algun elemento en animales con estas opciones?
si existe preguntar si es ese.
si no preguntar cual es al usuario y agregarlo

etc xD

y de los archivos estoy de acuerdo ademas de tener algunos animales en  la lista por defecto.

buenas

tincopasan

me hace acordar al principio de crear inteligencia artificial, hace un tiempo leí este artículo : http://www.exabyteinformatica.com/uoc/Inteligencia_artificial/Inteligencia_artificial_avanzada/Inteligencia_artificial_avanzada_%28Modulo_1%29.pdf quizá pueda orientarte o yo entendí cualquier cosa de lo que planteaste.
Éxitos.

Yidu

Cita de: tincopasan en  6 Diciembre 2014, 23:46 PM
me hace acordar al principio de crear inteligencia artificial, hace un tiempo leí este artículo : http://www.exabyteinformatica.com/uoc/Inteligencia_artificial/Inteligencia_artificial_avanzada/Inteligencia_artificial_avanzada_%28Modulo_1%29.pdf quizá pueda orientarte o yo entendí cualquier cosa de lo que planteaste.
Éxitos.

Gracias por el aporte. Creo que le vi alguna vez por la red. Pero como dice el titulo del libro, es IA avanzada. Y claro, demasiado avanzado para mi.

En todo caso, dejo un enlace de un vídeo, que he visto en Youtube, de mas o menos lo que quiero hacer. Pero en Python.

Es un juego para un ordenador de 8 bits. El mitico Amstrad CPC https://www.youtube.com/watch?v=m0SWW0sR0rI

Creo que para ese tipo de programa se deberá usar árbol de decisión o binario. Y como por aquella época, la programación orientada a objetos no se usaba en estos ordenadores, me gustaría hacer lo mismo pero con la potencia de Python. Sin usar tampoco la POO.


Me queda pilar el concepto de carga izquierda o derecha sin usar la POO. En todos los diagramas de árbol veo esto. Que desde la raíz se separan dos ramas (izq. y der.). La cosa es, que no se como aplicarlo con la programación funcional. O si no es necesario aplicar este concepto en la prog. funcional.

¿Cómo se sustituye este tipo de carga y nodos sin la POO?

tincopasan

hubiesemos empezado por ahí! este es un tema bastante viejo y recurrente! hay muchos libros y páginas que hablaron de esto, por ejemplo : http://www.genbetadev.com/paradigmas-de-programacion/crear-un-adivinador, después depende de tu conocimiento en python para hacer la implementación, pero esto es lo más básico.

Yidu

Dándole vueltas al asunto (e intentando crear esta estructura sin POO) me asaltan nuevas dudas.

De momento quiero crear un árbol simple, osea, binario. Los numerosos ejemplos se basan en la raíz principal y dos nodos izquierdo y derecho. Para estos ejemplos se usan números.
En el nodo principal (padre) se pone un número cualquiera. Y los que se generan después, si son mayor o igual al nodo padre, se sitúan al nodo derecho. Si son menores, al nodo izquierdo. Esto se va repitiendo y creando por los diferentes nodos.

Bien, ¿Pero como se implementa cuando se trata de preguntas y no números? He de suponer que ya no vale el 'mayor o igual que' o 'menor que' ¿Estos operadores se sustituyen en su caso por 'si' y 'no'?

Cuando tenga un primer borrador de código lo posteo. Aunque seguro que me lloverán criticas a diestro y siniestro.