/** * Returns the k instances of the given data set that are the closest to the instance that is * given as a parameter. * * @param dm the distance measure used to calculate the distance between instances * @param inst the instance for which we need to find the closest * @return the instances from the supplied data set that are closest to the supplied instance */ @Override public Set<Instance> kNearest(int k, Instance inst, DistanceMeasure dm) { Map<Instance, Double> closest = new HashMap<Instance, Double>(); double max = dm.getMaxValue(); for (Instance tmp : this) { double d = dm.measure(inst, tmp); if (dm.compare(d, max) && !inst.equals(tmp)) { closest.put(tmp, d); if (closest.size() > k) max = removeFarthest(closest, dm); } } return closest.keySet(); }
/** XXX DOC */ public double score(Dataset[] datas) { Instance[] centroids = new Instance[datas.length]; for (int i = 0; i < datas.length; i++) { centroids[i] = DatasetTools.average(datas[i]); } double sum = 0; for (int i = 0; i < datas.length; i++) { for (int j = 0; j < datas[i].size(); j++) { double error = dm.measure(datas[i].instance(j), centroids[i]); sum += error; } } return sum; }