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