/** * Cluster a new instance. * @param x a new instance. * @return the cluster label, which is the index of nearest medoid. */ @Override public int predict(T x) { double minDist = Double.MAX_VALUE; int bestCluster = 0; for (int i = 0; i < k; i++) { double dist = distance.d(x, medoids[i]); if (dist < minDist) { minDist = dist; bestCluster = i; } } return bestCluster; }
@Override public void range(T q, double radius, List<Neighbor<T,T>> neighbors) { if (radius <= 0.0) { throw new IllegalArgumentException("Invalid radius: " + radius); } for (int i = 0; i < data.length; i++) { if (q == data[i] && identicalExcluded) { continue; } double d = distance.d(q, data[i]); if (d <= radius) { neighbors.add(new SimpleNeighbor<>(data[i], i, d)); } } } }
@Override public Neighbor<T,T> nearest(T q) { T neighbor = null; int index = -1; double dist = Double.MAX_VALUE; for (int i = 0; i < data.length; i++) { if (q == data[i] && identicalExcluded) { continue; } double d = distance.d(q, data[i]); if (d < dist) { neighbor = data[i]; index = i; dist = d; } } return new SimpleNeighbor<>(neighbor, index, dist); }
double cost = distance.d(x1[i-1], x2[j-1]);
double dist = distance.d(q, data[i]); Neighbor<T,T> datum = heap.peek(); if (dist < datum.distance) {