'Return a list of the \'most informative\' features used by this
classifier.  For the purpose of this function, the
informativeness of a feature ``(fname,fval)`` is equal to the
highest value of P(fname=fval|label), for any label, divided by
the lowest value of P(fname=fval|label), for any label:
|  max[ P(fname=fval|label1) / P(fname=fval|label2) ]'

def most_informative_features(self, n=100):

    features = set()
    maxprob = defaultdict((lambda : 0.0))
    minprob = defaultdict((lambda : 1.0))
    for ((label, fname), probdist) in self._feature_probdist.items():
        for fval in probdist.samples():
            feature = (fname, fval)
            features.add(feature)
            p = probdist.prob(fval)
            maxprob[feature] = max(p, maxprob[feature])
            minprob[feature] = min(p, minprob[feature])
            if (minprob[feature] == 0):
                features.discard(feature)
    features = sorted(features, key=(lambda feature_: (minprob[feature_] / maxprob[feature_])))
    return features[:n]
