int KNN_prune_superfluous ( /////////////////////////////// // Parameters // /////////////////////////////// Pattern p, // source // Categories c, // source // long y, // source instance index // long k, // k(!) // long skipper // Skipping instance skipper // ) { if (y > p->ny) y = p->ny; // safety belt if (k > p->ny) k = p->ny; FeatureWeights fws = FeatureWeights_create(p->nx); if (fws) { long *indices = NUMlvector (0, k - 1); long *freqindices = NUMlvector (0, k - 1); double *distances = NUMdvector (0, k - 1); double *freqs = NUMdvector (0, k - 1); // KNN_kNeighboursSkip(p, p, fws, y, k, indices, skipper); .OS.081011 -> if(!KNN_kNeighboursSkip(p, p, fws, y, k, indices, skipper)) return(0); // .OS.081011 <- long ncategories = KNN_kIndicesToFrequenciesAndDistances(c, k, indices, distances, freqs, freqindices); forget(fws); int result = FRIENDS(c->item[y], c->item[freqindices[KNN_max(freqs, ncategories)]]); NUMlvector_free (indices, 0); NUMlvector_free (freqindices, 0); NUMdvector_free (distances, 0); NUMdvector_free (freqs, 0); if (result) return 1; } return 0; }
int KNN_prune_superfluous ( PatternList p, // source Categories c, // source long y, // source instance index long k, // k(!) long skipper // Skipping instance skipper ) { if (y > p -> ny) y = p -> ny; // safety belt if (k > p -> ny) k = p -> ny; autoFeatureWeights fws = FeatureWeights_create (p -> nx); autoNUMvector <long> indices (0L, k - 1); autoNUMvector <long> freqindices (0L, k - 1); autoNUMvector <double> distances (0L, k - 1); autoNUMvector <double> freqs (0L, k - 1); if (! KNN_kNeighboursSkip (p, p, fws.get(), y, k, indices.peek(), skipper)) return 0; long ncategories = KNN_kIndicesToFrequenciesAndDistances (c, k, indices.peek(), distances.peek(), freqs.peek(), freqindices.peek()); int result = FeatureWeights_areFriends (c->at [y], c->at [freqindices [KNN_max (freqs.peek(), ncategories)]]); if (result) return 1; return 0; }