martes, 26 de abril de 2011

Actividad 3 - Árboles de decisión

Spam o no Spam

Breve descripción del medio ambiente

Descripción detallada de la actividad o acción que va a aprender tu agente.
El programa tiene como finalidad el poder clasificar si un correo es considerado spam o no. Nótese que la definición de spam fue propuesta por nosotros, así que lo que el agente aprenderá tiene base en nuestra definición. Spam es cualquier intención de querer tratar de venderte algo y/o correos que no tengan un valor importante o que te puedan hacer daño

Descripción detallada de los patrones obtenidos del medio ambiente para el entrenamiento.
Los patrones los obtuvimos inicialmente de analizar cada uno de los casos según nuestro criterio de spam. Si hubiéramos obtenido los patrones mediante una encuesta podríamos haber sufrido de mucho overfitting por el ruido que se le mete al programa. Esto porque cada quien tiene una opinión diferente de lo que se considera spam. Se podía dar el caso de que se pudiera llegar a un porcentaje de relación entre las opiniones, pero los casos específicos hubieran hecho que algoritmo memorizara en lugar de aprender. Este tipo de aplicaciones están enfocadas a ser de uso personal y no de forma grupal.


Solución planteada al problema utilizando árboles de decisión (pueden utilizar ID3, C4.5, etc.).
Describe con detalle cada elemento del planteamiento:
i. Algoritmo de aprendizaje mediante árboles de decisión, ¿cuál algoritmo utilizaron y por qué?
Usamos el algoritmo de ID3 debido a que nuestro ambiente no es continuo. Y por tanto no se necesitan las mejoras del C4.5

ii. Patrones de aprendizaje:
1. ¿Cuántos patrones se utilizaron para el entrenamiento y por qué?
Usamos 300 patrones porque consideramos que eran suficientes como para que pudiera aprender sin necesidad de que tenga todas las opciones a la mano. El algoritmo no menciona cual es un número adecuado de patrones para aprender pero consideramos que al ser aprox el 40% de la población de posibilidades era suficiente para que pudiera generalizar.

2. ¿Cuántos patrones se utilizaron para la validación y por qué?
Para la validación usamos aproximadamente 20 patrones porque es un número ni muy grande ni muy pequeño para las pruebas.

3. Ejemplos de patrones con todo y el atributo de clasificación (clasificación                      correcta e incorrecta).
Ejemplo No Spam:
·       (SpamWords=Bajo,ImportantWords=Alta,self=No,cadena=No,%=No,Level=alto,Links=Si,Trustiness=Alta)
·         (SpamWords=Medio,,ImportantWords=Medio,self=Si,cadena=Si,%=No,Level=Medio,Links=Si,Trustiness=Alta)
Ejemplo Spam:
·         (SpamWords=Bajo,ImportantWords=Alta,self=No,cadena=So,%=Si,Level=bajo,Links=Si,Trustiness=Medio)
·         (SpamWords=Medio,ImportantWords=Baja,self=No,cadena=Si,%=No,Level=medio,Links=Si,Trustiness=Baja)

iii. ¿Funciona en tiempo real o fuera de línea su programa? ¿Por qué?
El entrenamiento es fuera de línea y el funcionamiento ya es en tiempo real. Pues el valor que tiene un filtro anti-spam es precisamente que funcione cada ocasión que te llegue un correo

iv. ¿Sobre clasifica los patrones (overfitting)? ¿Por qué?
Inicialmente si tenía overfitting puesto que algunos de los patrones se repetían y algunos estaban siendo mal clasificados. Solucionamos el problema clasificando los patrones de una mejor forma, con más consistencia.

v. ¿Cómo mejorarías el desempeño de tu programa?
Inicialmente haciendo que este funcione en tiempo real, es decir que realmente fuera parte de algún cliente de correo y que pueda regenerar el árbol con cada correo que le llegara. De la misma forma en que la App de importantes de google funciona, le vas poniendo que consideras importante y ve que agregar o no a su descripción de importancia. A lo mejor se podrían sacar palabras de las listas de spam e importancia y agregar dependiendo de la retroalimentación del usuario. Lo que sí es importante considerar es que considerar algo spam o no depende mucho de lo que el usuario finalmente considere poco importante.
  



Conclusiones después de la programación.
Esta actividad resultó interesante ya que el tema se nos hizo importante desde un punto de vista práctico. Tuvimos la oportunidad de desarrollar parte del código en python y aprender a usar una biblioteca de gráficos para python que nunca habíamos usado. Lo mejor fue lograr que el árbol si generalizara.



No hay comentarios:

Publicar un comentario