Java 类weka.core.ManhattanDistance 实例源码

项目:repo.kmeanspp.silhouette_score    文件:SimpleKMeans.java   
/**
 * sets the distance function to use for instance comparison.
 * 
 * @param df the new distance function to use
 * @throws Exception if instances cannot be processed
 */
public void setDistanceFunction(DistanceFunction df) throws Exception {
  if (!(df instanceof EuclideanDistance)
    && !(df instanceof ManhattanDistance)) {
    throw new Exception(
      "SimpleKMeans currently only supports the Euclidean and Manhattan distances.");
  }
  m_DistanceFunction = df;
}
项目:repo.kmeanspp.silhouette_score    文件:KMeansPlusPlusSC.java   
/**
 * sets the distance function to use for instance comparison.
 * 
 * @param df the new distance function to use
 * @throws Exception if instances cannot be processed
 */
public void setDistanceFunction(DistanceFunction df) throws Exception {
  if (!(df instanceof EuclideanDistance)
    && !(df instanceof ManhattanDistance)) {
    throw new Exception(
      "KMeansPlusPlus only supports the Euclidean and Manhattan distances.");
  }
  m_DistanceFunction = df;
}
项目:repo.kmeanspp.silhouette_score    文件:KMeansPlusPlus.java   
/**
 * sets the distance function to use for instance comparison.
 * 
 * @param df the new distance function to use
 * @throws Exception if instances cannot be processed
 */
public void setDistanceFunction(DistanceFunction df) throws Exception {
  if (!(df instanceof EuclideanDistance)
    && !(df instanceof ManhattanDistance)) {
    throw new Exception(
      "KMeansPlusPlus only supports the Euclidean and Manhattan distances.");
  }
  m_DistanceFunction = df;
}
项目:LibD3C-1.1    文件:SimpleKMeans.java   
/**
  * sets the distance function to use for instance comparison.
  * 
  * @param df the new distance function to use
  * @throws Exception if instances cannot be processed
  */
 public void setDistanceFunction(DistanceFunction df) throws Exception {
   if (!(df instanceof EuclideanDistance) && 
!(df instanceof ManhattanDistance))      {
     throw new Exception("SimpleKMeans currently only supports the Euclidean and Manhattan distances.");
   }
   m_DistanceFunction = df;
 }
项目:autoweka    文件:SimpleKMeans.java   
/**
  * sets the distance function to use for instance comparison.
  * 
  * @param df the new distance function to use
  * @throws Exception if instances cannot be processed
  */
 public void setDistanceFunction(DistanceFunction df) throws Exception {
   if (!(df instanceof EuclideanDistance) && 
!(df instanceof ManhattanDistance))      {
     throw new Exception("SimpleKMeans currently only supports the Euclidean and Manhattan distances.");
   }
   m_DistanceFunction = df;
 }
项目:umple    文件:SimpleKMeans.java   
/**
 * sets the distance function to use for instance comparison.
 * 
 * @param df the new distance function to use
 * @throws Exception if instances cannot be processed
 */
public void setDistanceFunction(DistanceFunction df) throws Exception {
  if (!(df instanceof EuclideanDistance)
    && !(df instanceof ManhattanDistance)) {
    throw new Exception(
      "SimpleKMeans currently only supports the Euclidean and Manhattan distances.");
  }
  m_DistanceFunction = df;
}
项目:jbossBA    文件:SimpleKMeans.java   
/**
 * sets the distance function to use for instance comparison.
 * 
 * @param df the new distance function to use
 * @throws Exception if instances cannot be processed
 */
public void setDistanceFunction(DistanceFunction df) throws Exception {
  if (!(df instanceof EuclideanDistance)
    && !(df instanceof ManhattanDistance)) {
    throw new Exception(
      "SimpleKMeans currently only supports the Euclidean and Manhattan distances.");
  }
  m_DistanceFunction = df;
}
项目:LibD3C-1.1    文件:SimpleKMeans.java   
/**
 * Move the centroid to it's new coordinates. Generate the centroid coordinates based 
 * on it's  members (objects assigned to the cluster of the centroid) and the distance 
 * function being used.
 * @param centroidIndex index of the centroid which the coordinates will be computed
 * @param members the objects that are assigned to the cluster of this centroid
 * @param updateClusterInfo if the method is supposed to update the m_Cluster arrays
 * @return the centroid coordinates
 */
protected double[] moveCentroid(int centroidIndex, Instances members, boolean updateClusterInfo) {
  double[] vals = new double[members.numAttributes()];

  //used only for Manhattan Distance
  Instances sortedMembers = null;
  int middle = 0;
  boolean dataIsEven = false;

  if (m_DistanceFunction instanceof ManhattanDistance) {
    middle = (members.numInstances()-1)/2;
    dataIsEven = ((members.numInstances()%2)==0);
    if (m_PreserveOrder) {
      sortedMembers = members;
    }else{
      sortedMembers = new Instances(members);
    }
  }

  for (int j = 0; j < members.numAttributes(); j++) {                       

    //in case of Euclidian distance the centroid is the mean point
    //in case of Manhattan distance the centroid is the median point
    //in both cases, if the attribute is nominal, the centroid is the mode
    if (m_DistanceFunction instanceof EuclideanDistance ||
       members.attribute(j).isNominal())
      {                                                 
        vals[j] = members.meanOrMode(j);
      }else if (m_DistanceFunction instanceof ManhattanDistance) {
      //singleton special case
      if (members.numInstances() == 1) {
        vals[j] = members.instance(0).value(j);
      }else{
        sortedMembers.kthSmallestValue(j, middle+1);
        vals[j] = sortedMembers.instance(middle).value(j);
        if ( dataIsEven ) {                     
          sortedMembers.kthSmallestValue(j, middle+2);                      
          vals[j] = (vals[j]+sortedMembers.instance(middle+1).value(j))/2;
        }
      }
    }   

    if (updateClusterInfo) {
      m_ClusterMissingCounts[centroidIndex][j] = members.attributeStats(j).missingCount;
      m_ClusterNominalCounts[centroidIndex][j] = members.attributeStats(j).nominalCounts;
      if (members.attribute(j).isNominal()) {
        if (m_ClusterMissingCounts[centroidIndex][j] >  
            m_ClusterNominalCounts[centroidIndex][j][Utils.maxIndex(m_ClusterNominalCounts[centroidIndex][j])]) 
          {
            vals[j] = Utils.missingValue(); // mark mode as missing
          }
      } else {
        if (m_ClusterMissingCounts[centroidIndex][j] == members.numInstances()) {
          vals[j] = Utils.missingValue(); // mark mean as missing
        }
      }
    }
  }
  if (updateClusterInfo)
    m_ClusterCentroids.add(new DenseInstance(1.0, vals));
  return vals;
}
项目:autoweka    文件:SimpleKMeans.java   
/**
 * Move the centroid to it's new coordinates. Generate the centroid coordinates based 
 * on it's  members (objects assigned to the cluster of the centroid) and the distance 
 * function being used.
 * @param centroidIndex index of the centroid which the coordinates will be computed
 * @param members the objects that are assigned to the cluster of this centroid
 * @param updateClusterInfo if the method is supposed to update the m_Cluster arrays
 * @return the centroid coordinates
 */
protected double[] moveCentroid(int centroidIndex, Instances members, boolean updateClusterInfo) {
  double[] vals = new double[members.numAttributes()];

  //used only for Manhattan Distance
  Instances sortedMembers = null;
  int middle = 0;
  boolean dataIsEven = false;

  if (m_DistanceFunction instanceof ManhattanDistance) {
    middle = (members.numInstances()-1)/2;
    dataIsEven = ((members.numInstances()%2)==0);
    if (m_PreserveOrder) {
      sortedMembers = members;
    }else{
      sortedMembers = new Instances(members);
    }
  }

  for (int j = 0; j < members.numAttributes(); j++) {                       

    //in case of Euclidian distance the centroid is the mean point
    //in case of Manhattan distance the centroid is the median point
    //in both cases, if the attribute is nominal, the centroid is the mode
    if (m_DistanceFunction instanceof EuclideanDistance ||
       members.attribute(j).isNominal())
      {                                                 
        vals[j] = members.meanOrMode(j);
      }else if (m_DistanceFunction instanceof ManhattanDistance) {
      //singleton special case
      if (members.numInstances() == 1) {
        vals[j] = members.instance(0).value(j);
      }else{
        sortedMembers.kthSmallestValue(j, middle+1);
        vals[j] = sortedMembers.instance(middle).value(j);
        if ( dataIsEven ) {                     
          sortedMembers.kthSmallestValue(j, middle+2);                      
          vals[j] = (vals[j]+sortedMembers.instance(middle+1).value(j))/2;
        }
      }
    }   

    if (updateClusterInfo) {
      m_ClusterMissingCounts[centroidIndex][j] = members.attributeStats(j).missingCount;
      m_ClusterNominalCounts[centroidIndex][j] = members.attributeStats(j).nominalCounts;
      if (members.attribute(j).isNominal()) {
        if (m_ClusterMissingCounts[centroidIndex][j] >  
            m_ClusterNominalCounts[centroidIndex][j][Utils.maxIndex(m_ClusterNominalCounts[centroidIndex][j])]) 
          {
            vals[j] = Utils.missingValue(); // mark mode as missing
          }
      } else {
        if (m_ClusterMissingCounts[centroidIndex][j] == members.numInstances()) {
          vals[j] = Utils.missingValue(); // mark mean as missing
        }
      }
    }
  }
  if (updateClusterInfo)
    m_ClusterCentroids.add(new DenseInstance(1.0, vals));
  return vals;
}
项目:umple    文件:SimpleKMeans.java   
/**
 * Move the centroid to it's new coordinates. Generate the centroid
 * coordinates based on it's members (objects assigned to the cluster of the
 * centroid) and the distance function being used.
 * 
 * @param centroidIndex index of the centroid which the coordinates will be
 *          computed
 * @param members the objects that are assigned to the cluster of this
 *          centroid
 * @param updateClusterInfo if the method is supposed to update the m_Cluster
 *          arrays
 * @param addToCentroidInstances true if the method is to add the computed
 *          coordinates to the Instances holding the centroids
 * @return the centroid coordinates
 */
protected double[] moveCentroid(int centroidIndex, Instances members,
  boolean updateClusterInfo, boolean addToCentroidInstances) {
  double[] vals = new double[members.numAttributes()];

  // used only for Manhattan Distance
  Instances sortedMembers = null;
  int middle = 0;
  boolean dataIsEven = false;

  if (m_DistanceFunction instanceof ManhattanDistance) {
    middle = (members.numInstances() - 1) / 2;
    dataIsEven = ((members.numInstances() % 2) == 0);
    if (m_PreserveOrder) {
      sortedMembers = members;
    } else {
      sortedMembers = new Instances(members);
    }
  }

  for (int j = 0; j < members.numAttributes(); j++) {

    // in case of Euclidian distance the centroid is the mean point
    // in case of Manhattan distance the centroid is the median point
    // in both cases, if the attribute is nominal, the centroid is the mode
    if (m_DistanceFunction instanceof EuclideanDistance
      || members.attribute(j).isNominal()) {
      vals[j] = members.meanOrMode(j);
    } else if (m_DistanceFunction instanceof ManhattanDistance) {
      // singleton special case
      if (members.numInstances() == 1) {
        vals[j] = members.instance(0).value(j);
      } else {
        vals[j] = sortedMembers.kthSmallestValue(j, middle + 1);
        if (dataIsEven) {
          vals[j] =
            (vals[j] + sortedMembers.kthSmallestValue(j, middle + 2)) / 2;
        }
      }
    }

    if (updateClusterInfo) {
      m_ClusterMissingCounts[centroidIndex][j] =
        members.attributeStats(j).missingCount;
      m_ClusterNominalCounts[centroidIndex][j] =
        members.attributeStats(j).nominalCounts;
      if (members.attribute(j).isNominal()) {
        if (m_ClusterMissingCounts[centroidIndex][j] > m_ClusterNominalCounts[centroidIndex][j][Utils
          .maxIndex(m_ClusterNominalCounts[centroidIndex][j])]) {
          vals[j] = Utils.missingValue(); // mark mode as missing
        }
      } else {
        if (m_ClusterMissingCounts[centroidIndex][j] == members
          .numInstances()) {
          vals[j] = Utils.missingValue(); // mark mean as missing
        }
      }
    }
  }
  if (addToCentroidInstances) {
    m_ClusterCentroids.add(new DenseInstance(1.0, vals));
  }
  return vals;
}
项目:jbossBA    文件:SimpleKMeans.java   
/**
 * Move the centroid to it's new coordinates. Generate the centroid
 * coordinates based on it's members (objects assigned to the cluster of the
 * centroid) and the distance function being used.
 * 
 * @param centroidIndex index of the centroid which the coordinates will be
 *          computed
 * @param members the objects that are assigned to the cluster of this
 *          centroid
 * @param updateClusterInfo if the method is supposed to update the m_Cluster
 *          arrays
 * @return the centroid coordinates
 */
protected double[] moveCentroid(int centroidIndex, Instances members,
  boolean updateClusterInfo) {
  double[] vals = new double[members.numAttributes()];

  // used only for Manhattan Distance
  Instances sortedMembers = null;
  int middle = 0;
  boolean dataIsEven = false;

  if (m_DistanceFunction instanceof ManhattanDistance) {
    middle = (members.numInstances() - 1) / 2;
    dataIsEven = ((members.numInstances() % 2) == 0);
    if (m_PreserveOrder) {
      sortedMembers = members;
    } else {
      sortedMembers = new Instances(members);
    }
  }

  for (int j = 0; j < members.numAttributes(); j++) {

    // in case of Euclidian distance the centroid is the mean point
    // in case of Manhattan distance the centroid is the median point
    // in both cases, if the attribute is nominal, the centroid is the mode
    if (m_DistanceFunction instanceof EuclideanDistance
      || members.attribute(j).isNominal()) {
      vals[j] = members.meanOrMode(j);
    } else if (m_DistanceFunction instanceof ManhattanDistance) {
      // singleton special case
      if (members.numInstances() == 1) {
        vals[j] = members.instance(0).value(j);
      } else {
        vals[j] = sortedMembers.kthSmallestValue(j, middle + 1);
        if (dataIsEven) {
          vals[j] = (vals[j] + sortedMembers.kthSmallestValue(j, middle + 2)) / 2;
        }
      }
    }

    if (updateClusterInfo) {
      m_ClusterMissingCounts[centroidIndex][j] = members.attributeStats(j).missingCount;
      m_ClusterNominalCounts[centroidIndex][j] = members.attributeStats(j).nominalCounts;
      if (members.attribute(j).isNominal()) {
        if (m_ClusterMissingCounts[centroidIndex][j] > m_ClusterNominalCounts[centroidIndex][j][Utils
          .maxIndex(m_ClusterNominalCounts[centroidIndex][j])]) {
          vals[j] = Instance.missingValue(); // mark mode as missing
        }
      } else {
        if (m_ClusterMissingCounts[centroidIndex][j] == members
          .numInstances()) {
          vals[j] = Instance.missingValue(); // mark mean as missing
        }
      }
    }
  }
  if (updateClusterInfo) {
    m_ClusterCentroids.add(new Instance(1.0, vals));
  }
  return vals;
}