entities.WekaBaselineBOWFeatureVector.java Source code

Java tutorial

Introduction

Here is the source code for entities.WekaBaselineBOWFeatureVector.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.Instance;
import weka.core.Instances;
import weka.core.converters.ArffSaver;

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

    @Override
    public ArrayList<Attribute> initializeWekaFeatureVector() {

        //Declaration of the numeric value cosSimilarity
        String s = "triNucleotide";

        //Declare the feature vector
        ArrayList<Attribute> fvWekaAttributesBow;
        fvWekaAttributesBow = new ArrayList<>();

        for (int i = 0; i < 64; i++) {
            Attribute tempAttribute = new Attribute(s + " " + Integer.toString(i));
            fvWekaAttributesBow.add(tempAttribute);
        }
        //Attribute Attribute2 = new Attribute("cosSimilarity2");
        //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);

        //for(int i = 0; i < 64; i++)
        //    fvWekaAttributesBow.add(Attribute1);
        //fvWekaAttributesBow.add(Attribute2);
        fvWekaAttributesBow.add(ClassAttribute);

        return fvWekaAttributesBow;
    }

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

        //values[0] = vSource.getCosSimilarityArrayAtIndex(0);//((vSource.getCosSimilarityArrayAtIndex(0) + vSource.getCosSimilarityArrayAtIndex(1)));
        //values[1] = vSource.getCosSimilarityArrayAtIndex(1);//((vSource.getCosSimilarityArrayAtIndex(0) + vSource.getCosSimilarityArrayAtIndex(1)));
        for (int i = 0; i < 64; i++)
            values[i] = vSource.getFrequencyArrayAtIndex(i);
        values[64] = data.attribute(64).indexOfValue(vSource.getLabel());

        Instance inst = new DenseInstance(1.0, values);

        return inst;
    }

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

        ArrayList<Attribute> attributes = initializeWekaFeatureVector();
        Instances isSet = new Instances(vList.get(0).getLabel(), attributes, vList.size());

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

        for (BaselineBOWFeatureVector BOWv : vList) {

            Instance i = fillFeatureVector(BOWv, isSet);

            isSet.add(i);
        }

        for (BaselineBOWFeatureVector BOWv : vList2) {

            Instance i = fillFeatureVector(BOWv, isSet);

            isSet.add(i);
        }

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

        return isSet;
    }

}