Example usage for weka.estimators KernelEstimator KernelEstimator

List of usage examples for weka.estimators KernelEstimator KernelEstimator

Introduction

In this page you can find the example usage for weka.estimators KernelEstimator KernelEstimator.

Prototype

public KernelEstimator(double precision) 

Source Link

Document

Constructor that takes a precision argument.

Usage

From source file:bme.mace.logicdomain.Evaluation.java

License:Open Source License

/**
 * Sets up the priors for numeric class attributes from the training class
 * values that have been seen so far.//  w ww.  j ava 2s  . c  o m
 */
protected void setNumericPriorsFromBuffer() {

    double numPrecision = 0.01; // Default value
    if (m_NumTrainClassVals > 1) {
        double[] temp = new double[m_NumTrainClassVals];
        System.arraycopy(m_TrainClassVals, 0, temp, 0, m_NumTrainClassVals);
        int[] index = Utils.sort(temp);
        double lastVal = temp[index[0]];
        double deltaSum = 0;
        int distinct = 0;
        for (int i = 1; i < temp.length; i++) {
            double current = temp[index[i]];
            if (current != lastVal) {
                deltaSum += current - lastVal;
                lastVal = current;
                distinct++;
            }
        }
        if (distinct > 0) {
            numPrecision = deltaSum / distinct;
        }
    }
    m_PriorErrorEstimator = new KernelEstimator(numPrecision);
    m_ErrorEstimator = new KernelEstimator(numPrecision);
    m_ClassPriors[0] = m_ClassPriorsSum = 0;
    for (int i = 0; i < m_NumTrainClassVals; i++) {
        m_ClassPriors[0] += m_TrainClassVals[i] * m_TrainClassWeights[i];
        m_ClassPriorsSum += m_TrainClassWeights[i];
        m_PriorErrorEstimator.addValue(m_TrainClassVals[i], m_TrainClassWeights[i]);
    }
}

From source file:cn.edu.xjtu.dbmine.source.NaiveBayes.java

License:Open Source License

/**
 * Generates the classifier./*from   w w  w.  j av a 2  s  .c  om*/
 *
 * @param instances set of instances serving as training data 
 * @exception Exception if the classifier has not been generated 
 * successfully
 */
public void buildClassifier(Instances instances) throws Exception {

    // can classifier handle the data?
    getCapabilities().testWithFail(instances);

    // remove instances with missing class
    instances = new Instances(instances);
    instances.deleteWithMissingClass();

    m_NumClasses = instances.numClasses();

    // Copy the instances
    m_Instances = new Instances(instances);

    // Discretize instances if required
    if (m_UseDiscretization) {
        m_Disc = new weka.filters.supervised.attribute.Discretize();
        m_Disc.setInputFormat(m_Instances);
        m_Instances = weka.filters.Filter.useFilter(m_Instances, m_Disc);
    } else {
        m_Disc = null;
    }

    // Reserve space for the distributions
    m_Distributions = new Estimator[m_Instances.numAttributes() - 1][m_Instances.numClasses()];
    m_ClassDistribution = new DiscreteEstimator(m_Instances.numClasses(), true);
    int attIndex = 0;
    Enumeration enu = m_Instances.enumerateAttributes();
    while (enu.hasMoreElements()) {
        Attribute attribute = (Attribute) enu.nextElement();

        // If the attribute is numeric, determine the estimator 
        // numeric precision from differences between adjacent values
        double numPrecision = DEFAULT_NUM_PRECISION;
        if (attribute.type() == Attribute.NUMERIC) {
            m_Instances.sort(attribute);
            if ((m_Instances.numInstances() > 0) && !m_Instances.instance(0).isMissing(attribute)) {
                double lastVal = m_Instances.instance(0).value(attribute);
                double currentVal, deltaSum = 0;
                int distinct = 0;
                for (int i = 1; i < m_Instances.numInstances(); i++) {
                    Instance currentInst = m_Instances.instance(i);
                    if (currentInst.isMissing(attribute)) {
                        break;
                    }
                    currentVal = currentInst.value(attribute);
                    if (currentVal != lastVal) {
                        deltaSum += currentVal - lastVal;
                        lastVal = currentVal;
                        distinct++;
                    }
                }
                if (distinct > 0) {
                    numPrecision = deltaSum / distinct;
                }
            }
        }

        for (int j = 0; j < m_Instances.numClasses(); j++) {
            switch (attribute.type()) {
            case Attribute.NUMERIC:
                if (m_UseKernelEstimator) {
                    m_Distributions[attIndex][j] = new KernelEstimator(numPrecision);
                } else {
                    m_Distributions[attIndex][j] = new NormalEstimator(numPrecision);
                }
                break;
            case Attribute.NOMINAL:
                m_Distributions[attIndex][j] = new DiscreteEstimator(attribute.numValues(), true);
                break;
            default:
                throw new Exception("Attribute type unknown to NaiveBayes");
            }
        }
        attIndex++;
    }

    // Compute counts
    Enumeration enumInsts = m_Instances.enumerateInstances();
    while (enumInsts.hasMoreElements()) {
        Instance instance = (Instance) enumInsts.nextElement();
        updateClassifier(instance);
    }

    // Save space
    m_Instances = new Instances(m_Instances, 0);
}

From source file:GClass.EvaluationInternal.java

License:Open Source License

/**
 * Sets up the priors for numeric class attributes from the
 * training class values that have been seen so far.
 *//*from w w w.  ja v a2  s .  c  om*/
protected void setNumericPriorsFromBuffer() {

    double numPrecision = 0.01; // Default value
    if (m_NumTrainClassVals > 1) {
        double[] temp = new double[m_NumTrainClassVals];
        System.arraycopy(m_TrainClassVals, 0, temp, 0, m_NumTrainClassVals);
        int[] index = Utils.sort(temp);
        double lastVal = temp[index[0]];
        double currentVal, deltaSum = 0;
        int distinct = 0;
        for (int i = 1; i < temp.length; i++) {
            double current = temp[index[i]];
            if (current != lastVal) {
                deltaSum += current - lastVal;
                lastVal = current;
                distinct++;
            }
        }
        if (distinct > 0) {
            numPrecision = deltaSum / distinct;
        }
    }
    m_PriorErrorEstimator = new KernelEstimator(numPrecision);
    m_ErrorEstimator = new KernelEstimator(numPrecision);
    m_ClassPriors[0] = m_ClassPriorsSum = 0;
    for (int i = 0; i < m_NumTrainClassVals; i++) {
        m_ClassPriors[0] += m_TrainClassVals[i] * m_TrainClassWeights[i];
        m_ClassPriorsSum += m_TrainClassWeights[i];
        m_PriorErrorEstimator.addValue(m_TrainClassVals[i], m_TrainClassWeights[i]);
    }
}

From source file:main.NaiveBayes.java

License:Open Source License

/**
 * Generates the classifier.// www  . j av a2 s.  c  o m
 * 
 * @param instances set of instances serving as training data
 * @exception Exception if the classifier has not been generated successfully
 */
@Override
public void buildClassifier(Instances instances) throws Exception {

    // can classifier handle the data?
    getCapabilities().testWithFail(instances);

    // remove instances with missing class
    instances = new Instances(instances);
    instances.deleteWithMissingClass();

    m_NumClasses = instances.numClasses();

    // Copy the instances
    m_Instances = new Instances(instances);

    // Discretize instances if required
    if (m_UseDiscretization) {
        m_Disc = new weka.filters.supervised.attribute.Discretize();
        m_Disc.setInputFormat(m_Instances);
        m_Instances = weka.filters.Filter.useFilter(m_Instances, m_Disc);
    } else {
        m_Disc = null;
    }

    // Reserve space for the distributions
    m_Distributions = new Estimator[m_Instances.numAttributes() - 1][m_Instances.numClasses()];
    m_ClassDistribution = new DiscreteEstimator(m_Instances.numClasses(), true);
    int attIndex = 0;
    Enumeration<Attribute> enu = m_Instances.enumerateAttributes();
    while (enu.hasMoreElements()) {
        Attribute attribute = enu.nextElement();

        // If the attribute is numeric, determine the estimator
        // numeric precision from differences between adjacent values
        double numPrecision = DEFAULT_NUM_PRECISION;
        if (attribute.type() == Attribute.NUMERIC) {
            m_Instances.sort(attribute);
            if ((m_Instances.numInstances() > 0) && !m_Instances.instance(0).isMissing(attribute)) {
                double lastVal = m_Instances.instance(0).value(attribute);
                double currentVal, deltaSum = 0;
                int distinct = 0;
                for (int i = 1; i < m_Instances.numInstances(); i++) {
                    Instance currentInst = m_Instances.instance(i);
                    if (currentInst.isMissing(attribute)) {
                        break;
                    }
                    currentVal = currentInst.value(attribute);
                    if (currentVal != lastVal) {
                        deltaSum += currentVal - lastVal;
                        lastVal = currentVal;
                        distinct++;
                    }
                }
                if (distinct > 0) {
                    numPrecision = deltaSum / distinct;
                }
            }
        }

        for (int j = 0; j < m_Instances.numClasses(); j++) {
            switch (attribute.type()) {
            case Attribute.NUMERIC:
                if (m_UseKernelEstimator) {
                    m_Distributions[attIndex][j] = new KernelEstimator(numPrecision);
                } else {
                    m_Distributions[attIndex][j] = new NormalEstimator(numPrecision);
                }
                break;
            case Attribute.NOMINAL:
                m_Distributions[attIndex][j] = new DiscreteEstimator(attribute.numValues(), true);
                break;
            default:
                throw new Exception("Attribute type unknown to NaiveBayes");
            }
        }
        attIndex++;
    }

    // Compute counts
    Enumeration<Instance> enumInsts = m_Instances.enumerateInstances();
    while (enumInsts.hasMoreElements()) {
        Instance instance = enumInsts.nextElement();
        updateClassifier(instance);
    }

    // Save space
    m_Instances = new Instances(m_Instances, 0);
}

From source file:milk.classifiers.MIEvaluation.java

License:Open Source License

/**
   * Sets up the priors for numeric class attributes from the 
   * training class values that have been seen so far.
   *//* w  ww.  j  a v a2s  . c  om*/
  private void setNumericPriorsFromBuffer() {

      double numPrecision = 0.01; // Default value
      if (m_NumTrainClassVals > 1) {
          double[] temp = new double[m_NumTrainClassVals];
          System.arraycopy(m_TrainClassVals, 0, temp, 0, m_NumTrainClassVals);
          int[] index = Utils.sort(temp);
          double lastVal = temp[index[0]];
          double currentVal, deltaSum = 0;
          int distinct = 0;
          for (int i = 1; i < temp.length; i++) {
              double current = temp[index[i]];
              if (current != lastVal) {
                  deltaSum += current - lastVal;
                  lastVal = current;
                  distinct++;
              }
          }
          if (distinct > 0) {
              numPrecision = deltaSum / distinct;
          }
      }
      m_PriorErrorEstimator = new KernelEstimator(numPrecision);
      m_ErrorEstimator = new KernelEstimator(numPrecision);
      m_ClassPriors[0] = m_ClassPriorsSum = 0.0001; // zf correction
      for (int i = 0; i < m_NumTrainClassVals; i++) {
          m_ClassPriors[0] += m_TrainClassVals[i] * m_TrainClassWeights[i];
          m_ClassPriorsSum += m_TrainClassWeights[i];
          m_PriorErrorEstimator.addValue(m_TrainClassVals[i], m_TrainClassWeights[i]);
      }
  }