Example usage for weka.core NormalizableDistance distance

List of usage examples for weka.core NormalizableDistance distance

Introduction

In this page you can find the example usage for weka.core NormalizableDistance distance.

Prototype

@Override
public double distance(Instance first, Instance second) 

Source Link

Document

Calculates the distance between two instances.

Usage

From source file:lu.lippmann.cdb.lab.mds.ClassicMDS.java

License:Open Source License

/**
 * /*from  w w  w  .  j a  v  a 2  s .c o m*/
 */
public static CollapsedInstances distanceBetweenInstances(final Instances instances,
        final MDSDistancesEnum distEnum, final int maxInstances, final boolean ignoreClassInDistance)
        throws Exception {
    KmeansResult mapCentroids = null;

    final NormalizableDistance usedDist;
    if (distEnum.equals(MDSDistancesEnum.EUCLIDEAN)) {
        usedDist = new EuclideanDistance(instances);
        //usedDist.setDontNormalize(true);
        //usedDist.setAttributeIndices("1");
        //usedDist.setInvertSelection(true);
    } else if (distEnum.equals(MDSDistancesEnum.MANHATTAN))
        usedDist = new ManhattanDistance(instances);
    else if (distEnum.equals(MDSDistancesEnum.MINKOWSKI)) {
        usedDist = new MinkowskiDistance(instances);
        final String[] parameters = MDSDistancesEnum.MINKOWSKI.getParameters();
        //Change order
        double order = Double.valueOf(parameters[0]).doubleValue();
        ((MinkowskiDistance) usedDist).setOrder(order);
    } else if (distEnum.equals(MDSDistancesEnum.CHEBYSHEV))
        usedDist = new ChebyshevDistance(instances);
    //else if (distEnum.equals(MDSDistancesEnum.DT)) usedDist=new DTDistance(instances);
    else
        throw new IllegalStateException();

    final int numInstances = instances.numInstances();
    final boolean collapsed = (numInstances > maxInstances)
            && (distEnum.equals(MDSDistancesEnum.EUCLIDEAN) || distEnum.equals(MDSDistancesEnum.MANHATTAN));

    SimpleMatrix distances;

    //Ignore class in distance
    if (ignoreClassInDistance && instances.classIndex() != -1) {
        usedDist.setAttributeIndices("" + (instances.classIndex() + 1));
        usedDist.setInvertSelection(true);
    }

    int numCollapsedInstances = numInstances;
    if (collapsed) {
        //Compute distance with centroids using K-means with K=MAX_INSTANCES
        mapCentroids = getSimplifiedInstances(instances, usedDist, maxInstances);

        final List<Instance> centroids = mapCentroids.getCentroids();
        numCollapsedInstances = centroids.size();

        distances = new SimpleMatrix(numCollapsedInstances, numCollapsedInstances);

        for (int i = 0; i < numCollapsedInstances; i++) {
            for (int j = i + 1; j < numCollapsedInstances; j++) {
                double dist = usedDist.distance(centroids.get(i), centroids.get(j));
                distances.set(i, j, dist);
                distances.set(j, i, dist);
            }
        }
    } else {
        distances = new SimpleMatrix(numCollapsedInstances, numCollapsedInstances);
        for (int i = 0; i < numCollapsedInstances; i++) {
            for (int j = i + 1; j < numCollapsedInstances; j++) {
                double dist = usedDist.distance(instances.get(i), instances.get(j));
                distances.set(i, j, dist);
                distances.set(j, i, dist);
            }
        }
    }
    return new CollapsedInstances(instances, mapCentroids, distances, collapsed);
}

From source file:net.sf.jclal.util.distancefunction.AcumulativeDistanceContainer.java

License:Open Source License

/**
 * Constructor by default./*ww  w  . j a v a 2s .  c o  m*/
 *
 * @param objectiveColumns The objetive colums
 * @param rows The rows
 * @param distanceFunction The distance function used to calculate the
 * similarity
 */
public AcumulativeDistanceContainer(Instances objectiveColumns, Instances rows,
        NormalizableDistance distanceFunction) {
    this.distanceFunction = distanceFunction;

    indexesChanges = new int[rows.numInstances()];
    for (int i = 0; i < indexesChanges.length; i++) {
        indexesChanges[i] = i;
    }
    size = indexesChanges.length;

    acumulativeValue = new double[rows.numInstances()];
    for (int i = 0; i < acumulativeValue.length; i++) {
        for (int j = 0; j < objectiveColumns.numInstances(); j++) {
            acumulativeValue[i] += distanceFunction.distance(rows.instance(i), objectiveColumns.instance(j));
        }
    }
}

From source file:net.sf.jclal.util.distancefunction.DistanceContainer.java

License:Open Source License

/**
 * Default constructor//from  www  .  j  ava2  s.  co  m
 *
 * @param instances dataset
 * @param distanceFunction The distance function used to calculate the
 * distance
 */
public DistanceContainer(Instances instances, NormalizableDistance distanceFunction) {

    size = instances.numInstances();

    indexesChanges = new int[size];

    acumulativeValue = new double[size];

    numAttributes = instances.numAttributes();

    int m = size - 1;

    distance = new double[m][];

    int temp;
    double valueTemp;
    for (int i = 0; i < m; ++i) {

        distance[i] = new double[size - i - 1];

        //In the begining the index and the value are equals
        indexesChanges[i] = i;

        for (int j = i + 1; j < size; ++j) {
            temp = j - i - 1;

            valueTemp = distanceFunction.distance(instances.instance(i), instances.instance(j));

            setStoreDistance(i, temp, valueTemp);

            //acumulative distance
            acumulativeValue[i] += valueTemp;
            acumulativeValue[j] += valueTemp;
        }
    }

    indexesChanges[size - 1] = size - 1;
}

From source file:net.sf.jclal.util.distancefunction.DistanceContainer.java

License:Open Source License

/**
 * Constructor by default/*from  ww w  .  java2 s  .  c o  m*/
 *
 * @param instances dataset
 * @param distanceFunction The distance function used to calculate the
 * distance
 * @param matrixOverFile Whether the matrix will be stored into a file
 * @throws java.lang.Exception The exception that will be launched
 */
public DistanceContainer(Instances instances, NormalizableDistance distanceFunction, boolean matrixOverFile)
        throws Exception {

    this.matrixOverFile = matrixOverFile;

    size = instances.numInstances();

    indexesChanges = new int[size];

    acumulativeValue = new double[size];

    numAttributes = instances.numAttributes();

    int m = size - 1;

    if (matrixOverFile) {
        distanceMatrix = new Matrix(size, size, true);
    } else {
        distance = new double[m][];
    }

    int temp;
    double valueTemp;
    for (int i = 0; i < m; ++i) {

        if (!matrixOverFile) {
            distance[i] = new double[size - i - 1];
        }

        //In the begining the index and the value are equals
        indexesChanges[i] = i;

        for (int j = i + 1; j < size; ++j) {
            temp = j - i - 1;
            valueTemp = distanceFunction.distance(instances.instance(i), instances.instance(j));

            setStoreDistance(i, temp, valueTemp);

            //acumulative distance
            acumulativeValue[i] += valueTemp;
            acumulativeValue[j] += valueTemp;
        }
    }

    indexesChanges[size - 1] = size - 1;
}