Created
September 20, 2023 12:43
-
-
Save diegoolipa/2fb1f796d949111ad0b8559dccccec4d to your computer and use it in GitHub Desktop.
Algoritmo de Arbol Decision en Java predecir si abordar a un automovil.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
<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
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