entities.WekaHMMFeatureVector.java Source code

Java tutorial

Introduction

Here is the source code for entities.WekaHMMFeatureVector.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 entities;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.FastVector;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffSaver;

/**
 *
 * @author nikos
 */
public class WekaHMMFeatureVector implements WekaFeatureVector {

    @Override
    public ArrayList<Attribute> initializeWekaFeatureVector() {
        //Declaration of the numeric value dMaxProb
        Attribute Attribute1 = new Attribute("Prob1");
        Attribute Attribute2 = new Attribute("Prob2");

        //Declare the class attribute along with its values
        ArrayList<String> fvClassVal = new ArrayList<>();
        fvClassVal.add("Nucleosome Free Region");
        fvClassVal.add("Nucleosome Binding Site");
        Attribute ClassAttribute = new Attribute("theClass", fvClassVal);

        ArrayList<Attribute> fvWekaAttributesHmm;
        fvWekaAttributesHmm = new ArrayList<>();
        fvWekaAttributesHmm.add(Attribute1);
        fvWekaAttributesHmm.add(Attribute2);
        fvWekaAttributesHmm.add(ClassAttribute);

        return fvWekaAttributesHmm;
    }

    public Instance fillFeatureVector(HMMFeatureVector vSource, Instances data) {
        double[] values = new double[data.numAttributes()];
        double min_prob;

        values[0] = vSource.getProbArrayAtIndex(0)
                / (vSource.getProbArrayAtIndex(0) + vSource.getProbArrayAtIndex(1));
        values[1] = vSource.getProbArrayAtIndex(1)
                / (vSource.getProbArrayAtIndex(0) + vSource.getProbArrayAtIndex(1));
        values[2] = data.attribute(2).indexOfValue(vSource.getLabel());

        Instance inst = new DenseInstance(1.0, values);
        return inst;
    }

    public Instances fillInstanceSet(ArrayList<HMMFeatureVector> vList, ArrayList<HMMFeatureVector> vList2)
            throws IOException {

        //FastVector fvWekaAttributesHmm = new FastVector(3);

        ArrayList<Attribute> attributes = initializeWekaFeatureVector();
        Instances isSet = new Instances("dataset", attributes, vList.size());

        isSet.setClassIndex(isSet.numAttributes() - 1);

        for (HMMFeatureVector HMMv : vList) {

            Instance i = fillFeatureVector(HMMv, isSet);

            isSet.add(i);
        }

        for (HMMFeatureVector HMMv : vList2) {

            Instance i = fillFeatureVector(HMMv, isSet);

            isSet.add(i);
        }

        ArffSaver saver = new ArffSaver();
        saver.setInstances(isSet);
        saver.setFile(new File("./data/test.arff"));
        saver.writeBatch();

        return isSet;
    }

}