Algumas definições
Para o desenvolvimento dos algoritmos vou criar algumas classes genéricas, e irei acrescentar funcionalidades a elas conforme o necessário. Para o algoritmo ID3, foram criadas as seguintes classes:
public class Record { private ArrayList<attribute> attributes; publicArrayList<attribute> getAttributes() { return attributes; } public void setAttributes(ArrayList<attribute> attributes) { this.attributes = attributes; } }
Classe criada para abrigar os exemplos do conjunto de treinamento e seus respectivos atributos.
public class Attribute { private String name; private double value; private boolean isUnknown; public Attribute(String name, double value) { this.name = name; this.value = value; isUnknown = false; } public Attribute(String name, String value) { this.name = name; try { this.value = Double.valueOf(value); this.isUnknown = false; } catch(NumberFormatException nfe) { this.value = -1; this.isUnknown = true; } } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setValue(double value) { this.value = value; } public double getValue() { return value; } public void setUnknown(boolean isUnknown) { this.isUnknown = isUnknown; } public boolean isUnknown() { return isUnknown; } }
Classe utilizada para guardar as informações referentes ao atributo, como por exemplo, nome, valor, etc. Como se trata de uma classe com propósitos genéricos o único tipo de dados aceito pela classe é o double, para aceitar os dados processados pelo ID3, que só aceita constantes, foi utilizado a classe descrita abaixo:
public class DiscreteAttribute { private Map<String, Integer> values; public DiscreteAttribute() { values = new HashMap<String, Integer>(); } public void setValue(String key) { if(!values.containsKey(key)) { values.put(key, values.size()); } } public int getValue(String key) { return values.get(key); } }
Classe que funciona como um enum dinâmico e tem como propósito transformar os valores discretos do conjunto de dados de treinamento do ID3 em valores numéricos.
Nenhum comentário :
Postar um comentário