acabreragnz / aa-18

Tareas del curso Aprendizaje Automático 2018
1 stars 0 forks source link

Refact lab2 #11

Closed brunopk closed 6 years ago

brunopk commented 6 years ago

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:

data = arff.load(open(path, 'r'))
attributes = data["attributes"]
columns = [x[0] for x in attributes]
return pd.DataFrame(data=data['data'], columns=columns), attributes

Toda esta información de un atributo esta en la clase AttributeInfo, por ejemplo en type está si es string (str) o float

Este es el principal commit. Como puse en los comentarios del commit, la idea es manejar un objeto Condition, esto tiene varias ventajas:

acabreragnz commented 6 years ago

Excelente laburo, dejo un poco descrito el flujo de las cosas.

  1. El clasificador recibe una funcion que es la encargada de decidir el mejor atributo, a partir del atributo objetivo.

Classifier(select_attribute, target_attribute)

  1. Se hace fit, que representa la generacion del arbol con el algoritmo id3 a partir del ds

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.

  1. Dado un ejemplo se predice su resultado usando

classifier.predict(instance) el cual retorna True si da YES sino False