Example usage for weka.core Instances attribute

List of usage examples for weka.core Instances attribute

Introduction

In this page you can find the example usage for weka.core Instances attribute.

Prototype

publicAttribute attribute(String name) 

Source Link

Document

Returns an attribute given its name.

Usage

From source file:myid3andc45classifier.Model.MyC45.java

private Instances convertInstances(Instances data, Attribute att, double threshold) {
    Instances newData = new Instances(data);
    int idx = att.index();
    String name = att.name();/*from  w ww.j a  va  2 s.  com*/

    try {
        Add filter = new Add();
        //filter.setAttributeIndex((idx + 2) + "");
        filter.setNominalLabels("<=" + threshold + ",>" + threshold);
        filter.setAttributeName(name + " " + threshold);
        filter.setInputFormat(newData);
        newData = Filter.useFilter(newData, filter);
    } catch (Exception e) {
        e.printStackTrace();
    }
    //System.out.println("Base attribute "+name+" index "+newData.attribute(name).index());
    //System.out.println("New attribute "+newData.attribute(name + " " + threshold).name()+" index "+newData.attribute(name + " " + threshold).index());
    for (int i = 0; i < newData.numInstances(); ++i) {
        if ((double) newData.instance(i).value(newData.attribute(idx)) <= threshold) {
            newData.instance(i).setValue(newData.attribute(name + " " + threshold), "<=" + threshold);
        } else {
            newData.instance(i).setValue(newData.attribute(name + " " + threshold), ">" + threshold);
        }
    }

    //newData.deleteAttributeAt(att.index());

    return newData;
}

From source file:myid3andc45classifier.Model.MyID3.java

public void makeMyID3Tree(Instances data) throws Exception {

    // Mengecek apakah tidak terdapat instance yang dalam node ini
    if (data.numInstances() == 0) {
        attribute = null;/*from w  ww  .  j  a  v  a 2 s . c om*/
        classValue = Instance.missingValue();
        return;
    }

    // Compute attribute with maximum information gain.
    double[] infoGains = new double[data.numAttributes()];
    Enumeration attEnum = data.enumerateAttributes();
    while (attEnum.hasMoreElements()) {
        Attribute att = (Attribute) attEnum.nextElement();
        infoGains[att.index()] = computeInfoGain(data, att);
    }

    attribute = data.attribute(maxIndex(infoGains));

    // Make leaf if information gain is zero. 
    // Otherwise create successors.
    if (isDoubleEqual(infoGains[attribute.index()], 0)) {
        attribute = null;
        double[] numClasses = new double[data.numClasses()];

        Enumeration instEnum = data.enumerateInstances();
        while (instEnum.hasMoreElements()) {
            Instance inst = (Instance) instEnum.nextElement();
            numClasses[(int) inst.classValue()]++;
        }

        label = maxIndex(numClasses);
        classAttribute = data.classAttribute();
    } else {
        Instances[] splitData = splitInstancesByAttribute(data, attribute);
        successors = new MyID3[attribute.numValues()];
        for (int j = 0; j < attribute.numValues(); j++) {
            successors[j] = new MyID3();
            successors[j].buildClassifier(splitData[j]);
        }
    }
}

From source file:myJ48.MyJ48.java

/**
 * Construct the tree using the given instance
 * Find the highest attribute value which best at dividing the data
 * @param data Instance/* w  w  w  . ja v a2  s .c  om*/
 */
public void buildTree(Instances data) throws Exception {
    if (data.numInstances() > 0) {
        // Lets find the highest Information Gain!
        // First compute each information gain attribute
        double IG[] = new double[data.numAttributes()];
        Enumeration enumAttribute = data.enumerateAttributes();
        while (enumAttribute.hasMoreElements()) {
            Attribute attribute = (Attribute) enumAttribute.nextElement();
            IG[attribute.index()] = informationGain(data, attribute);
            // System.out.println(attribute.toString() + ": " + IG[attribute.index()]);
        }
        // Assign it as the tree attribute!
        currentAttribute = data.attribute(maxIndex(IG));
        //System.out.println(Arrays.toString(IG) + IG[currentAttribute.index()]);

        // IG = 0 then current node = leaf!
        if (Utils.eq(IG[currentAttribute.index()], 0)) {
            // Set the class value as the highest frequency of the class
            currentAttribute = null;
            classDistribution = new double[data.numClasses()];
            Enumeration enumInstance = data.enumerateInstances();
            while (enumInstance.hasMoreElements()) {
                Instance temp = (Instance) enumInstance.nextElement();
                classDistribution[(int) temp.classValue()]++;
            }
            Utils.normalize(classDistribution);
            classValue = Utils.maxIndex(classDistribution);
            classAttribute = data.classAttribute();
        } else {
            // Create another node from the current tree
            Instances[] splitData = splitDataByAttribute(data, currentAttribute);
            nodes = new MyJ48[currentAttribute.numValues()];

            for (int i = 0; i < currentAttribute.numValues(); i++) {
                nodes[i] = new MyJ48(this);
                nodes[i].buildTree(splitData[i]);
            }
        }
    } else {
        classAttribute = null;
        classValue = Utils.missingValue();
        classDistribution = new double[data.numClasses()];
    }

}

From source file:myJ48.MyJ48.java

public Instances NumericToNominal(Instances numericSet) throws Exception {
    //TODO: cek atribut numerik
    double maxIG, curIG;
    int maxIdx;//  w w  w.  j a  va2 s.c  o  m
    for (int i = 0; i < numericSet.numAttributes(); i++) {
        //System.out.println(numericSet.attribute(i).name());
        Instances tempSet;
        if (numericSet.attribute(i).isNumeric()) {
            //System.out.println("is numeric");
            maxIG = 0;
            maxIdx = 0;
            //Instances[] NominalizedSets = new Instances[numericSet.numInstances()];
            for (int ix = 0; ix < numericSet.numInstances(); ix++) {
                tempSet = NumericToNominalByThreshold(numericSet, i, numericSet.instance(ix).value(i));
                curIG = informationGain(tempSet, tempSet.attribute(i));
                if (maxIG < curIG) {
                    maxIG = curIG;
                    maxIdx = ix;
                }
            }
            numericSet = NumericToNominalByThreshold(numericSet, i, numericSet.instance(maxIdx).value(i));
            //                System.out.println("Nominalized by attribute " + numericSet.attribute(i).name() + " :\n" + numericSet.toString());
            //                System.out.println("max index: "+ maxIdx);
            //                System.out.println("max IG: " + informationGain(numericSet, numericSet.attribute(i)));
        }
    }
    return numericSet;
}

From source file:myJ48.MyJ48.java

public Instances NumericToNominalByThreshold(Instances numericSet, int idx_attribute, double threshold)
        throws Exception {
    double[] values;
    Instances NominalizedSet = new Instances(numericSet);
    //System.out.println("number of instances: " + NominalizedSet.numInstances());
    values = numericSet.attributeToDoubleArray(idx_attribute);
    List<String> nominalValue = new ArrayList<String>();
    nominalValue.add("low");
    nominalValue.add("high");
    Attribute nominalAttrib = new Attribute(numericSet.attribute(idx_attribute).name() + "_nominal",
            nominalValue);/*from w  w  w . j a  va 2s. co m*/
    NominalizedSet.insertAttributeAt(nominalAttrib, idx_attribute);
    for (int i = 0; i < values.length; i++) {
        if (values[i] <= threshold) {
            NominalizedSet.instance(i).setValue(idx_attribute, "low");
        } else {
            NominalizedSet.instance(i).setValue(idx_attribute, "high");
        }
    }
    String[] options = { "-R", String.valueOf(idx_attribute + 2) };
    Filter remove = (Filter) Class.forName("weka.filters.unsupervised.attribute.Remove").newInstance();
    ((OptionHandler) remove).setOptions(options);
    remove.setInputFormat(NominalizedSet);
    NominalizedSet = Filter.useFilter(NominalizedSet, remove);

    return NominalizedSet;
}

From source file:NaiveBayes.Atribut.java

public Atribut(Instances ints, int i, int classindex) throws Exception {
    if (ints.attribute(i).isNumeric()) {
        Instances newData = new Instances(ints);
        Discretize f = new Discretize();
        f.setInputFormat(newData);/*from www  . j a  v a 2  s .  c o m*/
        newData = Filter.useFilter(newData, f);
        name = ints.attribute(i).name();
        listNilai = new ArrayList<>();
        for (int j = 0; j < newData.attribute(i).numValues(); j++) {
            listNilai.add(new Nilai(ints, i, j, classindex));
        }
    } else {
        name = ints.attribute(i).name().replaceAll("\\s+", "");
        //            System.out.println(name);
        listNilai = new ArrayList<>();
        for (int j = 0; j < ints.attribute(i).numValues(); j++) {
            listNilai.add(new Nilai(ints, i, j, classindex));
        }
    }

}

From source file:NaiveBayes.NaiveBayes.java

/**
 * @param args the command line arguments
 * @throws java.io.IOException//from  w  w w .j ava  2s .  c o  m
 */
public static void main(String[] args) throws IOException, Exception {
    System.out.print("1. Buat Model \n");
    System.out.print("2. Load Model\n");
    System.out.print("Masukkan pilihan : ");
    Scanner sc = new Scanner(System.in);
    int pil = sc.nextInt();
    System.out.print("Masukkan nama file : ");
    String filename = sc.next();
    DataSource source = new DataSource(("D:\\Program Files\\Weka-3-8\\data\\" + filename));
    Instances train = source.getDataSet();
    for (int i = 0; i < train.numAttributes(); i++)
        System.out.println(i + ". " + train.attribute(i).name());
    System.out.print("Masukkan indeks kelas : ");
    int classIdx = sc.nextInt();
    train.setClassIndex(classIdx);
    //        MultilayerPerceptron mlp = new MultilayerPerceptron(train, 0.1, 10000, 14);
    //        mlp.buildClassifier(train);
    //        Evaluation eval = new Evaluation (train);
    ////        eval.evaluateModel(mlp, train);
    //        System.out.println(eval.toSummaryString());
    NaiveBayes tb = new NaiveBayes();
    Evaluation eval = new Evaluation(train);
    switch (pil) {
    case 1:
        //                tb.buildClassifier(train);
        //                tb.toSummaryString();
        //                eval.evaluateModel(tb, train);
        eval.crossValidateModel(tb, train, 10, new Random(1));
        System.out.println(eval.toSummaryString(true));
        System.out.println(eval.toMatrixString());
        //saveModel(tb);
        break;
    default:
        tb = loadModel();
        tb.toSummaryString();
        eval.crossValidateModel(tb, train, 10, new Random(1));
        System.out.println(eval.toSummaryString());
        //                System.out.println(eval.toMatrixString());
    }
}

From source file:NaiveBayes.NaiveBayes.java

public static int[] getNumEachClass(Instances ins) {
    int[] countEachClass = new int[ins.numClasses()];
    for (int i = 0; i < ins.numClasses(); i++) {
        int cnt = 0;
        for (int j = 0; j < ins.numInstances(); j++) {
            if (ins.attribute(ins.classIndex()).value(i)
                    .equals(ins.get(j).toString(ins.classIndex()).replaceAll("\\s+", "")))
                cnt++;/*from   w w  w. j av  a  2 s.  c o m*/
        }
        countEachClass[i] = cnt;
    }
    return countEachClass;
}

From source file:NaiveBayes.NaiveBayes.java

public String classify(Instances init) {
    int nAttributes = init.numAttributes();
    Instance ins = new DenseInstance(nAttributes);
    Instances newData = init;/*from   w w w .jav  a 2 s.  c  om*/
    Scanner s = new Scanner(System.in);
    Double in;
    System.out.println("Jumlah Atribut : " + (nAttributes - 1));

    for (int i = 1; i <= nAttributes - 1; i++) {
        //Attribute a = train.attribute(i - 1);
        System.out.print("Attribute " + i + " : ");
        in = s.nextDouble();
        ins.setValue(i, in);
        //newIns[i] = in;
    }
    newData.add(ins);
    double nomorKelas = classifyInstance(newData.lastInstance());
    return init.attribute(init.numAttributes() - 1).value((int) nomorKelas);
}

From source file:naivebayes.NBRun.java

public static void main(String[] args) throws Exception {
    System.out.println("Naive Bayes Classifier");
    Instances data = TucilWeka.readDataSet("C:\\Program Files\\Weka-3-8\\data\\mush_test.arff");
    Scanner scan = new Scanner(System.in);
    Classifier cls;// www. ja v  a2s  . c o  m
    Instances train = TucilWeka.readDataSet("C:\\Program Files\\Weka-3-8\\data\\mush.arff");

    System.out.println("Read or create model? r/c");
    if (scan.next().equals("c")) {
        cls = new NBTubesAI();
        cls.buildClassifier(train);
        TucilWeka.saveModel(train);
    } else {
        cls = (NBTubesAI) TucilWeka.readModel();
    }
    Evaluation eval = new Evaluation(data);
    System.out.println("10 fold cross validate or Full train? c/f");
    if (scan.next().equals("c")) {
        int fold = 10;
        for (int i = 0; i < data.numAttributes(); i++) {
            System.out.println(i + ". " + data.attribute(i));
        }
        eval.crossValidateModel(cls, data, fold, new Random(1));
    } else {
        for (int i = 0; i < data.numAttributes(); i++) {
            System.out.println(i + ". " + data.attribute(i));
        }
        data.deleteWithMissingClass();
        try {

            eval.evaluateModel(cls, data);
        } catch (java.lang.Exception ex) {
            eval.crossValidateModel(cls, data, 11, new Random(1));
        }
    }
    //        Classifier cls=new NBTubesAI();
    //        cls.buildClassifier(data);

    System.out.println("Hasil evaluasi: ");
    System.out.println(eval.toSummaryString());
    System.out.println(eval.toMatrixString());
    System.out.println(eval.toClassDetailsString());
}