Gemäß der CountVectorizer
Dokumentation hier .
Bei Verwendung eines Floats im Bereich [0.0, 1.0]
beziehen sie sich auf das Dokument . Dies ist der Prozentsatz der Dokumente, die den Begriff enthalten.
Bei Verwendung eines int bezieht sich dies auf die absolute Anzahl von Dokumenten, die diesen Begriff enthalten.
Betrachten Sie das Beispiel, in dem Sie 5 Textdateien (oder Dokumente) haben. Wenn Sie festlegen max_df = 0.6
, wird dies in 0.6*5=3
Dokumente übersetzt . Wenn Sie festlegen max_df = 2
, wird dies einfach in 2 Dokumente übersetzt.
Das folgende Quellcodebeispiel wurde hier von Github kopiert und zeigt, wie das max_doc_count
aus dem aufgebaut ist max_df
. Der Code für min_df
ist ähnlich und befindet sich auf der GH-Seite.
max_doc_count = (max_df
if isinstance(max_df, numbers.Integral)
else max_df * n_doc)
Die Standardeinstellungen für min_df
und max_df
sind 1 bzw. 1,0. Im Grunde heißt es: "Wenn mein Begriff nur in einem Dokument gefunden wird, wird er ignoriert. Wenn er in allen Dokumenten (100% oder 1.0) gefunden wird, wird er ebenfalls ignoriert."
max_df
und min_df
werden verwendet , um sowohl intern zu berechnen max_doc_count
und min_doc_count
die maximale und minimale Anzahl von Dokumenten , dass ein Begriff muss gefunden werden. Diese wird dann übergeben , self._limit_features
wie die Keyword - Argumente high
und low
jeweils die docstring für self._limit_features
IST
"""Remove too rare or too common features.
Prune features that are non zero in more samples than high or less
documents than low, modifying the vocabulary, and restricting it to
at most the limit most frequent.
This does not prune samples with zero features.
"""
min_df
heißt es: "Begriffe ignorieren, deren Dokumenthäufigkeit strikt unter dem angegebenen Schwellenwert liegt." Eine Frequenz, die streng niedriger als die Standardeinstellung von 1 ist, würde bedeuten, Begriffe zu ignorieren, die niemals erscheinen (!), Aber Begriffe beizubehalten, die einmal erscheinen.min_df
und falschmax_df
. Ich habe eine Antwort hinzugefügt, die genau erklärt, wie diese Parameter von CountVectorizer interpretiert werden.Ich würde diesen Punkt auch zum Verständnis
min_df
undmax_df
in tf-idf besser hinzufügen.Wenn Sie die Standardwerte verwenden, dh alle Begriffe berücksichtigen, haben Sie definitiv mehr Token generiert. Daher dauert Ihr Clustering-Prozess (oder alles andere, was Sie später mit diesen Begriffen tun möchten) länger.
ABER die Qualität Ihres Clusters sollte NICHT verringert werden.
Man könnte denken, dass das Vorhandensein aller Begriffe (z. B. zu häufige Begriffe oder Stoppwörter) die Qualität beeinträchtigen könnte, in tf-idf jedoch nicht. Weil die tf-idf-Messung diesen Begriffen instinktiv eine niedrige Punktzahl verleiht, wodurch sie effektiv keinen Einfluss haben (wie sie in vielen Dokumenten vorkommen).
Zusammenfassend lässt sich sagen, dass das Beschneiden der Begriffe über
min_df
undmax_df
die Leistung verbessert und nicht die Qualität von Clustern (als Beispiel).Und der entscheidende Punkt ist , dass wenn Sie den Satz
min
undmax
fälschlicherweise, würden Sie einige wichtige Begriffe verlieren und damit die Qualität senken. Also , wenn Sie sich nicht sicher über die richtige Schwelle sind (es hängt von Ihren Dokumenten gesetzt), oder wenn Sie sicher sind , über Ihre Maschine Verarbeitungsfähigkeiten verlassen diemin
,max
Parameter unverändert.quelle
Die Standardeinstellungen für min_df und max_df sind 1 bzw. 1,0. Diese Standardeinstellungen bewirken überhaupt nichts.
Abgesehen davon glaube ich, dass die derzeit akzeptierte Antwort von @Ffisegydd nicht ganz richtig ist.
Führen Sie dies beispielsweise mit den Standardeinstellungen aus, um zu sehen, wann
min_df=1
undmax_df=1.0
dann1) Alle Token, die in mindestens einem Dokument enthalten sind, werden verwendet (z. B. alle Token!).
2) Alle Token, die in allen Dokumenten enthalten sind, werden verwendet (wir testen mit einem Kandidaten: überall).
cv = CountVectorizer(min_df=1, max_df=1.0, lowercase=True) # here is just a simple list of 3 documents. corpus = ['one two three everywhere', 'four five six everywhere', 'seven eight nine everywhere'] # below we call fit_transform on the corpus and get the feature names. X = cv.fit_transform(corpus) vocab = cv.get_feature_names() print vocab print X.toarray() print cv.stop_words_
Wir bekommen:
[u'eight', u'everywhere', u'five', u'four', u'nine', u'one', u'seven', u'six', u'three', u'two'] [[0 1 0 0 0 1 0 0 1 1] [0 1 1 1 0 0 0 1 0 0] [1 1 0 0 1 0 1 0 0 0]] set([])
Alle Token werden aufbewahrt. Es gibt keine Stoppwörter.
Weiteres Herumspielen mit den Argumenten verdeutlicht andere Konfigurationen.
Für Spaß und Einsicht würde ich auch empfehlen, damit herumzuspielen
stop_words = 'english'
und zu sehen, dass besonders alle Wörter außer 'sieben' entfernt werden! Einschließlich "überall".quelle
Das Ziel von
MIN_DF
ist es, Wörter zu ignorieren, die nur sehr wenige Vorkommen haben, um als sinnvoll angesehen zu werden. In Ihrem Text können beispielsweise Namen von Personen enthalten sein, die möglicherweise nur in einem oder zwei Dokumenten enthalten sind. In einigen Anwendungen kann dies als Rauschen gelten und aus der weiteren Analyse ausgeschlossen werden. Ebenso können Sie Wörter ignorieren, die zu häufig vorkommenMAX_DF
.Anstatt eine minimale / maximale Termhäufigkeit (Gesamt Vorkommen eines Wortes) mit Worten zu beseitigen,
MIN_DF
undMAX_DF
sehen , wie viele Dokumente einen Begriff enthalten ist , besser als Dokumenthäufigkeit bekannt. Die Schwellenwerte können ein absoluter Wert (z. B. 1, 2, 3, 4) oder ein Wert sein, der den Anteil der Dokumente darstellt (z. B. 0,25, dh Wörter ignorieren, die in 25% der Dokumente enthalten sind).Hier finden Sie einige Anwendungsbeispiele .
quelle