Пример #1
0
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;
}
Пример #2
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;
}