Example usage for weka.core Instance numClasses

List of usage examples for weka.core Instance numClasses

Introduction

In this page you can find the example usage for weka.core Instance numClasses.

Prototype

public int numClasses();

Source Link

Document

Returns the number of class labels.

Usage

From source file:org.if4071.myann.TopologyModel.java

public void insertDataToOutputNodes(Instance inputData) {
    int classValue = (int) inputData.classValue();
    for (int i = 0; i < inputData.numClasses(); i++) {
        Node n = nodes.get(nodes.size() - layers.get(layers.size() - 1) + i);
        if (i == classValue) {
            n.setTarget(1);/*from  w  ww.ja va  2s  . c o  m*/
        } else {
            n.setTarget(0);
        }
    }
}

From source file:sg.edu.nus.comp.nlp.ims.classifiers.CMultiClassesSVM.java

License:Open Source License

@Override
public double[] distributionForInstance(Instance p_Instance) throws Exception {
    double[] probs = new double[p_Instance.numClasses()];
    Instance newInst = this.filterInstance(p_Instance);
    newInst.setDataset(this.m_OutputFormat);
    newInst.setMissing(newInst.classAttribute());
    if (this.m_Classifiers == null) {
        return new double[] { 1 };
    }//from   w w  w  . j  a  va2 s .  c om
    if (this.m_Classifiers.length == 1) {
        return this.m_Classifiers[0].distributionForInstance(newInst);
    }
    for (int i = 0; i < this.m_Classifiers.length; i++) {
        if (this.m_Classifiers[i] != null) {
            double[] current = this.m_Classifiers[i].distributionForInstance(newInst);
            for (int j = 0; j < this.m_ClassAttribute.numValues(); j++) {
                if (j == i) {
                    probs[j] += current[1];
                } else {
                    probs[j] += current[0];
                }
            }
        }
    }
    if (Utils.gr(Utils.sum(probs), 0)) {
        Utils.normalize(probs);
        return probs;
    } else {
        return m_ZeroR.distributionForInstance(newInst);
    }
}

From source file:smo2.SMO.java

License:Open Source License

/**
 * Estimates class probabilities for given instance.
 *//* w  w w  .  ja  va2s . co m*/
public double[] distributionForInstance(Instance inst) throws Exception {

    // Filter instance
    if (!m_checksTurnedOff) {
        m_Missing.input(inst);
        m_Missing.batchFinished();
        inst = m_Missing.output();
    }

    if (!m_onlyNumeric) {
        m_NominalToBinary.input(inst);
        m_NominalToBinary.batchFinished();
        inst = m_NominalToBinary.output();
    }

    if (m_Filter != null) {
        m_Filter.input(inst);
        m_Filter.batchFinished();
        inst = m_Filter.output();
    }

    if (!m_fitLogisticModels) {
        double[] result = new double[inst.numClasses()];
        for (int i = 0; i < inst.numClasses(); i++) {
            for (int j = i + 1; j < inst.numClasses(); j++) {
                if ((m_classifiers[i][j].m_alpha != null) || (m_classifiers[i][j].m_sparseWeights != null)) {
                    double output = m_classifiers[i][j].mySVMOutput(-1, inst);
                    if (output > 0) {
                        result[j] += 1;
                    } else {
                        result[i] += 1;
                    }
                }
            }
        }
        Utils.normalize(result);
        return result;
    } else {

        // We only need to do pairwise coupling if there are more
        // then two classes.
        if (inst.numClasses() == 2) {
            double[] newInst = new double[2];
            newInst[0] = m_classifiers[0][1].mySVMOutput(-1, inst);
            newInst[1] = Instance.missingValue();
            return m_classifiers[0][1].m_logistic.distributionForInstance(new Instance(1, newInst));
        }
        double[][] r = new double[inst.numClasses()][inst.numClasses()];
        double[][] n = new double[inst.numClasses()][inst.numClasses()];
        for (int i = 0; i < inst.numClasses(); i++) {
            for (int j = i + 1; j < inst.numClasses(); j++) {
                if ((m_classifiers[i][j].m_alpha != null) || (m_classifiers[i][j].m_sparseWeights != null)) {
                    double[] newInst = new double[2];
                    newInst[0] = m_classifiers[i][j].mySVMOutput(-1, inst);
                    newInst[1] = Instance.missingValue();
                    r[i][j] = m_classifiers[i][j].m_logistic
                            .distributionForInstance(new Instance(1, newInst))[0];
                    n[i][j] = m_classifiers[i][j].m_sumOfWeights;
                }
            }
        }
        return pairwiseCoupling(n, r);
    }
}

From source file:smo2.SMO.java

License:Open Source License

/**
 * Returns an array of votes for the given instance.
 * //from   w  w  w.ja v a2  s.c o  m
 * @param inst
 *            the instance
 * @return array of votex
 * @exception Exception
 *                if something goes wrong
 */
public double obtainVotes(Instance inst) throws Exception {

    // Filter instance
    if (!m_checksTurnedOff) {
        m_Missing.input(inst);
        m_Missing.batchFinished();
        inst = m_Missing.output();
    }

    if (!m_onlyNumeric) {
        m_NominalToBinary.input(inst);
        m_NominalToBinary.batchFinished();
        inst = m_NominalToBinary.output();
    }

    if (m_Filter != null) {
        m_Filter.input(inst);
        m_Filter.batchFinished();
        inst = m_Filter.output();
    }

    double[] votes = new double[inst.numClasses()];
    for (int i = 0; i < inst.numClasses(); i++) {
        for (int j = i + 1; j < inst.numClasses(); j++) {
            double output = m_classifiers[i][j].mySVMOutput(-1, inst);
            if (output > 0) {
                votes[j] += output;
            } else {
                votes[i] += output;
            }
        }
    }
    double ss = votes[0] + votes[1];
    return ss;
}

From source file:tr.gov.ulakbim.jDenetX.classifiers.CoOzaBagASHT.java

License:Open Source License

/**
 * This is the main classification function that is used by the GUI
 *//*  w  w  w  . j  a v  a 2  s .  com*/
public double[] getVotesForInstance(Instance inst) {
    DoubleVector combinedVote = new DoubleVector();
    DoubleVector confidenceVec = new DoubleVector();
    double[] ensembleVotes = new double[inst.numClasses()];
    double qbcEntropy = 0.0;
    int success = 0;
    int alpha1 = 1;
    int alpha2 = 1;
    for (int i = 0; i < this.ensemble.length; i++) {
        DoubleVector vote = new DoubleVector(this.ensemble[i].getVotesForInstance(inst));
        if (vote.sumOfValues() > 0.0) {
            vote.normalize();
            confidenceVec.addValues(vote);
            if ((this.useWeightOption != null) && this.useWeightOption.isSet()) {
                vote.scaleValues(1.0 / (this.error[i] * this.error[i]));
                //System.out.println("Ensemble : " + i + " Error: " + this.error[i]);
            }
            combinedVote.addValues(vote);
        }
        //
        //Ignore the classifiers which have high error ratio
        //
        if (this.error[i] < 0.23) {
            //
            // this is the votes of the ensembles for the classes
            //
            success++;
            ensembleVotes[combinedVote.maxIndex()] += combinedVote.getValue(combinedVote.maxIndex());
        }
    }
    //For confidence measure add to the pool  and in order to fit the confidence value between 0 and 1 divide by success val
    //System.out.println("Confidence " + combinedVote.getValue(combinedVote.maxIndex()));
    if ((confidenceVec.getValue(combinedVote.maxIndex())) >= confidenceThreshold) {
        qbcEntropy = queryByCommitee(ensembleVotes, inst.numClasses(), success);
        double activeLearningRatio = (qbcEntropy)
                * (combinedVote.getValue(combinedVote.maxIndex()) / this.ensemble.length);
        inst.setClassValue(combinedVote.maxIndex()); //Set the class value of the instance
        instConfPool.addVotedInstance(inst, combinedVote.getValue(combinedVote.maxIndex()),
                activeLearningRatio);
        instConfCount++;
    }
    return combinedVote.getArrayRef();
}

From source file:tr.gov.ulakbim.jDenetX.classifiers.CoOzaBagASHT.java

License:Open Source License

/**
 * This is the main classification function that is used by the GUI
 *///from   w  w  w  . j  a v a 2  s  . co m
public double[] getVotesForInstanceOrig(Instance inst) {
    DoubleVector combinedVote = new DoubleVector();
    double[] ensembleVotes = new double[inst.numClasses()];
    double qbcEntropy = 0.0;
    int success = 0;

    for (int i = 0; i < this.ensemble.length; i++) {
        DoubleVector vote = new DoubleVector(this.ensemble[i].getVotesForInstance(inst));
        // This will call the HoeffdingTree's getVotesForInstance Function
        if (vote.sumOfValues() > 0.0) {
            vote.normalize();
            if ((this.useWeightOption != null) && this.useWeightOption.isSet()) {
                vote.scaleValues(1.0 / (this.error[i] * this.error[i]));
                System.out.println("Ensemble : " + i + " Error: " + this.error[i]);
            }
            //
            //Ignore the ensembles which have high error ratio
            //
            if (this.error[i] < 0.3) {
                combinedVote.addValues(vote);
            }
        }
        //
        // this is the votes of the ensembles for the classes
        //
        if (this.error[i] < 0.3) {
            success++;
            ensembleVotes[combinedVote.maxIndex()] += combinedVote.getValue(combinedVote.maxIndex());
        }
    }
    // For confidence measure add to the pool  and in order to fit the confidence value between 0 and 1 divide by success val

    if ((combinedVote.getValue(combinedVote.maxIndex()) / success) >= confidenceThreshold) {
        qbcEntropy = queryByCommitee(ensembleVotes, inst.numClasses(), 0);
        System.out.println("QBC Entropy: " + qbcEntropy);
        double activeLearningRatio = (qbcEntropy)
                + (combinedVote.getValue(combinedVote.maxIndex()) / this.ensemble.length);
        inst.setClassValue(combinedVote.maxIndex());
        instConfPool.addVotedInstance(inst, combinedVote.getValue(combinedVote.maxIndex()),
                activeLearningRatio);
    }
    return combinedVote.getArrayRef();
}

From source file:tr.gov.ulakbim.jDenetX.classifiers.LeveragingBag.java

License:Open Source License

@Override
public void trainOnInstanceImpl(Instance inst) {
    int numClasses = inst.numClasses();
    //Output Codes
    if (this.initMatrixCodes == true) {
        this.matrixCodes = new int[this.ensemble.length][inst.numClasses()];
        for (int i = 0; i < this.ensemble.length; i++) {
            int numberOnes;
            int numberZeros;

            do { // until we have the same number of zeros and ones
                numberOnes = 0;//from w ww . ja  va 2 s  .  c o m
                numberZeros = 0;
                for (int j = 0; j < numClasses; j++) {
                    int result = 0;
                    if (j == 1 && numClasses == 2) {
                        result = 1 - this.matrixCodes[i][0];
                    } else {
                        result = (this.classifierRandom.nextBoolean() ? 1 : 0);
                    }
                    this.matrixCodes[i][j] = result;
                    if (result == 1)
                        numberOnes++;
                    else
                        numberZeros++;
                }
            } while ((numberOnes - numberZeros) * (numberOnes - numberZeros) > (this.ensemble.length % 2));

        }
        this.initMatrixCodes = false;
    }

    boolean Change = false;
    double w = 1.0;
    double mt = 0.0;
    Instance weightedInst = (Instance) inst.copy();
    /*for (int i = 0; i < this.ensemble.length; i++) {
      if (this.outputCodesOption.isSet()) {
          weightedInst.setClassValue((double) this.matrixCodes[i][(int) inst.classValue()] );
      }
      if(!this.ensemble[i].correctlyClassifies(weightedInst)) {
          mt++;
      }
      }*/
    //update w
    w = this.weightShrinkOption.getValue(); //1.0 +mt/2.0;
    //Train ensemble of classifiers
    for (int i = 0; i < this.ensemble.length; i++) {
        int k = MiscUtils.poisson(w, this.classifierRandom);
        if (k > 0) {
            if (this.outputCodesOption.isSet()) {
                weightedInst.setClassValue((double) this.matrixCodes[i][(int) inst.classValue()]);
            }
            weightedInst.setWeight(inst.weight() * k);
            this.ensemble[i].trainOnInstance(weightedInst);
        }
        boolean correctlyClassifies = this.ensemble[i].correctlyClassifies(weightedInst);
        double ErrEstim = this.ADError[i].getEstimation();
        if (this.ADError[i].setInput(correctlyClassifies ? 0 : 1))
            if (this.ADError[i].getEstimation() > ErrEstim)
                Change = true;
    }
    if (Change) {
        numberOfChangesDetected++;
        double max = 0.0;
        int imax = -1;
        for (int i = 0; i < this.ensemble.length; i++) {
            if (max < this.ADError[i].getEstimation()) {
                max = this.ADError[i].getEstimation();
                imax = i;
            }
        }
        if (imax != -1) {
            this.ensemble[imax].resetLearning();
            //this.ensemble[imax].trainOnInstance(inst);
            this.ADError[imax] = new ADWIN((double) this.deltaAdwinOption.getValue());
        }
    }
}

From source file:tr.gov.ulakbim.jDenetX.classifiers.LeveragingBagHalf.java

License:Open Source License

@Override
public void trainOnInstanceImpl(Instance inst) {
    int numClasses = inst.numClasses();
    //Output Codes
    if (this.initMatrixCodes == true) {
        this.matrixCodes = new int[this.ensemble.length][inst.numClasses()];
        for (int i = 0; i < this.ensemble.length; i++) {
            int numberOnes;
            int numberZeros;

            do { // until we have the same number of zeros and ones
                numberOnes = 0;/*from w w  w .jav  a 2s  .  c o m*/
                numberZeros = 0;
                for (int j = 0; j < numClasses; j++) {
                    int result = 0;
                    if (j == 1 && numClasses == 2) {
                        result = 1 - this.matrixCodes[i][0];
                    } else {
                        result = (this.classifierRandom.nextBoolean() ? 1 : 0);
                    }
                    this.matrixCodes[i][j] = result;
                    if (result == 1)
                        numberOnes++;
                    else
                        numberZeros++;
                }
            } while ((numberOnes - numberZeros) * (numberOnes - numberZeros) > (this.ensemble.length % 2));

        }
        this.initMatrixCodes = false;
    }

    boolean Change = false;
    double w = 1.0;
    double mt = 0.0;
    Instance weightedInst = (Instance) inst.copy();
    //Train ensemble of classifiers
    for (int i = 0; i < this.ensemble.length; i++) {
        int k = this.classifierRandom.nextBoolean() ? 0 : (int) this.weightShrinkOption.getValue(); //half bagging
        if (k > 0) {
            if (this.outputCodesOption.isSet()) {
                weightedInst.setClassValue((double) this.matrixCodes[i][(int) inst.classValue()]);
            }
            weightedInst.setWeight(k);
            this.ensemble[i].trainOnInstance(weightedInst);
        }
        boolean correctlyClassifies = this.ensemble[i].correctlyClassifies(weightedInst);
        double ErrEstim = this.ADError[i].getEstimation();
        if (this.ADError[i].setInput(correctlyClassifies ? 0 : 1))
            if (this.ADError[i].getEstimation() > ErrEstim)
                Change = true;
    }
    if (Change) {
        numberOfChangesDetected++;
        double max = 0.0;
        int imax = -1;
        for (int i = 0; i < this.ensemble.length; i++) {
            if (max < this.ADError[i].getEstimation()) {
                max = this.ADError[i].getEstimation();
                imax = i;
            }
        }
        if (imax != -1) {
            this.ensemble[imax].resetLearning();
            //this.ensemble[imax].trainOnInstance(inst);
            this.ADError[imax] = new ADWIN((double) this.deltaAdwinOption.getValue());
        }
    }
}

From source file:tr.gov.ulakbim.jDenetX.classifiers.LeveragingBagWT.java

License:Open Source License

@Override
public void trainOnInstanceImpl(Instance inst) {
    int numClasses = inst.numClasses();
    //Output Codes
    if (this.initMatrixCodes == true) {
        this.matrixCodes = new int[this.ensemble.length][inst.numClasses()];
        for (int i = 0; i < this.ensemble.length; i++) {
            int numberOnes;
            int numberZeros;

            do { // until we have the same number of zeros and ones
                numberOnes = 0;//from  w  w  w. j a v a  2 s  . c o m
                numberZeros = 0;
                for (int j = 0; j < numClasses; j++) {
                    int result = 0;
                    if (j == 1 && numClasses == 2) {
                        result = 1 - this.matrixCodes[i][0];
                    } else {
                        result = (this.classifierRandom.nextBoolean() ? 1 : 0);
                    }
                    this.matrixCodes[i][j] = result;
                    if (result == 1)
                        numberOnes++;
                    else
                        numberZeros++;
                }
            } while ((numberOnes - numberZeros) * (numberOnes - numberZeros) > (this.ensemble.length % 2));

        }
        this.initMatrixCodes = false;
    }

    boolean Change = false;
    double w = 1.0;
    double mt = 0.0;
    Instance weightedInst = (Instance) inst.copy();
    //update w
    w = this.weightShrinkOption.getValue();
    //Train ensemble of classifiers
    for (int i = 0; i < this.ensemble.length; i++) {
        int k = 1 + MiscUtils.poisson(w, this.classifierRandom);
        if (k > 0) {
            if (this.outputCodesOption.isSet()) {
                weightedInst.setClassValue((double) this.matrixCodes[i][(int) inst.classValue()]);
            }
            weightedInst.setWeight(inst.weight() * k);
            this.ensemble[i].trainOnInstance(weightedInst);
        }
        boolean correctlyClassifies = this.ensemble[i].correctlyClassifies(weightedInst);
        double ErrEstim = this.ADError[i].getEstimation();
        if (this.ADError[i].setInput(correctlyClassifies ? 0 : 1))
            if (this.ADError[i].getEstimation() > ErrEstim)
                Change = true;
    }
    if (Change) {
        numberOfChangesDetected++;
        double max = 0.0;
        int imax = -1;
        for (int i = 0; i < this.ensemble.length; i++) {
            if (max < this.ADError[i].getEstimation()) {
                max = this.ADError[i].getEstimation();
                imax = i;
            }
        }
        if (imax != -1) {
            this.ensemble[imax].resetLearning();
            //this.ensemble[imax].trainOnInstance(inst);
            this.ADError[imax] = new ADWIN((double) this.deltaAdwinOption.getValue());
        }
    }
}

From source file:tr.gov.ulakbim.jDenetX.classifiers.LeveragingSubag.java

License:Open Source License

@Override
public void trainOnInstanceImpl(Instance inst) {
    int numClasses = inst.numClasses();
    //Output Codes
    if (this.initMatrixCodes == true) {
        this.matrixCodes = new int[this.ensemble.length][inst.numClasses()];
        for (int i = 0; i < this.ensemble.length; i++) {
            int numberOnes;
            int numberZeros;

            do { // until we have the same number of zeros and ones
                numberOnes = 0;/*from  w  ww. j  ava 2 s  .  c o m*/
                numberZeros = 0;
                for (int j = 0; j < numClasses; j++) {
                    int result = 0;
                    if (j == 1 && numClasses == 2) {
                        result = 1 - this.matrixCodes[i][0];
                    } else {
                        result = (this.classifierRandom.nextBoolean() ? 1 : 0);
                    }
                    this.matrixCodes[i][j] = result;
                    if (result == 1)
                        numberOnes++;
                    else
                        numberZeros++;
                }
            } while ((numberOnes - numberZeros) * (numberOnes - numberZeros) > (this.ensemble.length % 2));

        }
        this.initMatrixCodes = false;
    }

    boolean Change = false;
    double w = 1.0;
    double mt = 0.0;
    Instance weightedInst = (Instance) inst.copy();

    //Train ensemble of classifiers
    for (int i = 0; i < this.ensemble.length; i++) {
        int k = MiscUtils.poisson(1, this.classifierRandom);
        k = (k > 0) ? (int) this.weightShrinkOption.getValue() : 0;
        if (k > 0) {
            if (this.outputCodesOption.isSet()) {
                weightedInst.setClassValue((double) this.matrixCodes[i][(int) inst.classValue()]);
            }
            weightedInst.setWeight(k);
            this.ensemble[i].trainOnInstance(weightedInst);
        }
        boolean correctlyClassifies = this.ensemble[i].correctlyClassifies(weightedInst);
        double ErrEstim = this.ADError[i].getEstimation();
        if (this.ADError[i].setInput(correctlyClassifies ? 0 : 1))
            if (this.ADError[i].getEstimation() > ErrEstim)
                Change = true;
    }
    if (Change) {
        numberOfChangesDetected++;
        double max = 0.0;
        int imax = -1;
        for (int i = 0; i < this.ensemble.length; i++) {
            if (max < this.ADError[i].getEstimation()) {
                max = this.ADError[i].getEstimation();
                imax = i;
            }
        }
        if (imax != -1) {
            this.ensemble[imax].resetLearning();
            this.ADError[imax] = new ADWIN((double) this.deltaAdwinOption.getValue());
        }
    }
}