Skip to content

Instantly share code, notes, and snippets.

@diegoolipa
Created September 20, 2023 12:43
Show Gist options
  • Save diegoolipa/2fb1f796d949111ad0b8559dccccec4d to your computer and use it in GitHub Desktop.
Save diegoolipa/2fb1f796d949111ad0b8559dccccec4d to your computer and use it in GitHub Desktop.
Algoritmo de Arbol Decision en Java predecir si abordar a un automovil.
package org.example;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.J48;
import weka.core.*;
import com.opencsv.CSVReader;
import java.io.FileReader;
import java.util.List;
public class ArbolDecisionSimple {
public static void main(String[] args) throws Exception {
// Definir los atributos y su tipo
FastVector attributes = new FastVector();
// Atributos numéricos
Attribute tiempo = new Attribute("tiempo");
Attribute distancia = new Attribute("Distancia");
// Atributos nominales
FastVector empresaValues = new FastVector();
empresaValues.addElement("A");
empresaValues.addElement("B");
empresaValues.addElement("C");
Attribute empresa = new Attribute("empresa", empresaValues);
FastVector prisaValues = new FastVector();
prisaValues.addElement("SI");
prisaValues.addElement("NO");
Attribute prisa = new Attribute("prisa", prisaValues);
FastVector decisionAbordarValues = new FastVector();
decisionAbordarValues.addElement("SI");
decisionAbordarValues.addElement("NO");
Attribute decisionAbordarAttribute = new Attribute("decision abordar", decisionAbordarValues);
attributes.addElement(tiempo);
attributes.addElement(distancia);
attributes.addElement(empresa);
attributes.addElement(prisa);
attributes.addElement(decisionAbordarAttribute);
Instances dataset = new Instances("MiDataset", attributes, 0);
dataset.setClassIndex(dataset.numAttributes() - 1);
// Cargar datos desde un archivo CSV
CSVReader reader = new CSVReader(new FileReader("data/mi_data1.csv"));
// Saltar la primera línea que contiene los nombres de las columnas
reader.readNext();
List<String[]> data = reader.readAll();
// Agregar instancias al conjunto de datos desde el archivo CSV
for (String[] row : data) {
DenseInstance instance = new DenseInstance(dataset.numAttributes());
instance.setValue(tiempo, Double.parseDouble(row[2]));
instance.setValue(distancia, Double.parseDouble(row[3]));
instance.setValue(empresa, empresaValues.indexOf(row[1])); // Convierte empresa a valor numérico
instance.setValue(prisa, prisaValues.indexOf(row[4])); // Convierte prisa a valor numérico
instance.setValue(decisionAbordarAttribute, decisionAbordarValues.indexOf(row[5]));
dataset.add(instance);
}
// Cerrar el lector de CSV
reader.close();
// Crear un clasificador J48 (árbol de decisión)
J48 tree = new J48();
tree.buildClassifier(dataset);
// Evaluar el modelo utilizando evaluación cruzada
Evaluation evaluation = new Evaluation(dataset);
evaluation.crossValidateModel(tree, dataset, 7, new java.util.Random(1));
// Imprimir la matriz de confusión
System.out.println("Matriz de Confusión:");
System.out.println(evaluation.toMatrixString());
// Imprimir la precisión (confiabilidad) del modelo
double accuracy = evaluation.pctCorrect();
System.out.println("Precisión (Confianza): " + accuracy + "%");
// Realizar una predicción para un nuevo ejemplo (ajusta los valores)
Instance newExample = new DenseInstance(dataset.numAttributes());
newExample.setValue(tiempo, 25);
newExample.setValue(distancia, 8);
newExample.setValue(empresa, empresaValues.indexOf("B")); // Convierte empresa a valor numérico
newExample.setValue(prisa, prisaValues.indexOf("SI")); // Convierte prisa a valor numérico
// Conectar la instancia al conjunto de datos
newExample.setDataset(dataset);
// Predecir la clase
double prediction = tree.classifyInstance(newExample);
String predictedClass = dataset.classAttribute().value((int) prediction);
System.out.println("-La decisión de abordar es: " + predictedClass);
}
}
@diegoolipa
Copy link
Author

ruta,empresa,tiempo,Distancia,prisa,decision_abordar
2s,A,20,5,SI,SI
3,B,30,10,SI,NO
2s,A,10,15,SI,SI
4b,C,20,10,NO,SI
3,B,20,5,SI,SI
4b,A,30,15,SI,NO
3,B,10,30,SI,NO

@diegoolipa
Copy link
Author

<dependencies>
    <!-- Agrega la dependencia de Apache Commons Math -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-math3</artifactId>
        <version>3.6.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/nz.ac.waikato.cms.weka/weka-dev -->
    <dependency>
        <groupId>nz.ac.waikato.cms.weka</groupId>
        <artifactId>weka-dev</artifactId>
        <version>3.9.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.opencsv/opencsv -->
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>5.7.1</version>
    </dependency>
</dependencies>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment