util.Weka.java Source code

Java tutorial

Introduction

Here is the source code for util.Weka.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package util;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Random;
import weka.classifiers.Classifier;
import weka.classifiers.Evaluation;
import weka.classifiers.trees.*;
import weka.core.*;

/**
 *
 * @author David
 */
public class Weka {

    Classifier conocimiento = null;
    Instances casosEntrenamiento = null;
    int maximoNumeroCasosEntrenamiento = 200;
    Instance caso;

    public Weka(String FicheroEntrenamiento) {
        try {
            casosEntrenamiento = new Instances(new BufferedReader(new FileReader(FicheroEntrenamiento)));
            casosEntrenamiento.setClassIndex(casosEntrenamiento.numAttributes() - 1);
            conocimiento = new M5P(); //ra regresin, o J48 para clasificacin
            conocimiento.buildClassifier(casosEntrenamiento);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public double resultadoEsperado() {
        return resultadoEsperado(caso);
    }

    public double resultadoEsperado(Instance casoADecidir) {
        double resultado = 0;
        try {
            resultado = conocimiento.classifyInstance(casoADecidir);
        } catch (Exception e) {
            // meter al log el error, supongo
        }
        return resultado;
    }

    public void generarCasoADecidir(double... atributos) {
        caso = casoADecidir(atributos);
    }

    public Instance casoADecidir(double... atributos) {
        Instance casoAdecidir = new Instance(casosEntrenamiento.numAttributes());
        casoAdecidir.setDataset(casosEntrenamiento);
        for (int i = 0; i < atributos.length; i++) {
            casoAdecidir.setValue(i, atributos[i]);
        }
        return casoAdecidir;
    }

    public void fijarAprendizaje(double fuerza, double resultadoRealObservado) {
        fijarAprendizaje(casoADecidir(fuerza), resultadoRealObservado);
    }

    public void fijarAprendizaje(Instance casoAdecidir, double resultadoRealObservado) {
        casoAdecidir.setClassValue(resultadoRealObservado);
        casosEntrenamiento.add(casoAdecidir);
        for (int i = 0; i < casosEntrenamiento.numInstances() - this.maximoNumeroCasosEntrenamiento; i++) {
            casosEntrenamiento.delete(0); //Si hay muchos ejemplos borrar el ms antiguo
        }
        try {
            conocimiento.buildClassifier(casosEntrenamiento);
            Evaluation evaluador = new Evaluation(casosEntrenamiento);
            evaluador.crossValidateModel(conocimiento, casosEntrenamiento, 10, new Random(1));
        } catch (Exception e) {
            // meter el error al log
        }
    }
}