Closed brunopk closed 6 years ago
Excelente laburo, dejo un poco descrito el flujo de las cosas.
Classifier(select_attribute, target_attribute)
classifier.fit(ds)
Id3 ahora contiene Node
y LeafNode
Los nodos de tipo Node
tienen contenido una condicion de tipo Condition
que nos permite navegar por las ramas. Es decir se recorre el arbol desde la raiz nodo a nodo, hasta llegar a una hoja.
La clase derivada de Condition
es DiscreteCondition
la cual sirve tanto para evaluar como para filtrar las instancias.
DiscreteCondition
recibe un atributo y un valor, luego al evaluar (eval
) una instancia, se fija que la instancia aplicada en ese atributo tenga ese valor (si da True
es que el nodo actual es por el cual debemos navegando)
Sobre StrategyResult
, representa el mejor atributo seleccionado y las particiones. Las particiones son un listado de condiciones, cada una asociada a cada rama posible, que se van a evaluar en el paso recursivo de ID3.
classifier.predict(instance)
el cual retorna True
si da YES
sino False
La idea de este PR es facilitar el desarrollo poniendo foco principalmente en que sea lo mas simple posible soportar atributos numéricos. Dejo un resumen de lo mas importante de cada commit:
Commit https://github.com/acabreragnz/aa-18/pull/11/commits/8d95fa54926909e9b4c0c39bb80e7a886c674f56 No se estaba usando el método fit, se tenía el árbol separado de la clase y luego se usaba el método predict pasándole como parámetro un árbol (nodo raiz).
Commit https://github.com/acabreragnz/aa-18/pull/11/commits/c6b1d4a69a47fb411ba60d889e49e8d3c85b26e4 La idea es tener unificado el manejo de los ARFF. Una cosa que noté es que el formato de los ARFF define una especie de tipos de atributos (
NUMERIC
, etc) que no son los mismos que en Python (float, str, etc). Las ventajas de esto son:Toda esta información de un atributo esta en la clase
AttributeInfo
, por ejemplo entype
está si es string (str
) ofloat
Este es el principal commit. Como puse en los comentarios del commit, la idea es manejar un objeto
Condition
, esto tiene varias ventajas:Condition
para modelar los intervalos sobre los valores 2) Definir la estrategia para elegir un atributo, o sea como saber si es mejor que otros atributos, generar las particiones como puse antes, etc. Todo esto se puede hacer en un archivo en el directorio lab2/ej5/src/strategy