Zrozumienie min DF i max DF w scikit CountVectorizer

Mam pięć plików tekstowych, które wprowadzam do CountVectorizer. Określając min_df i max_df do instancji CountVectorizer, co dokładnie oznacza Minimalna / Maksymalna częstotliwość dokumentu? Czy jest to częstotliwość słowa w danym pliku tekstowym, czy jest to częstotliwość słowa w całym korpusie (5 plików txt)?

Czym się różni, gdy min_df i max_df są podane jako liczby całkowite lub jako pływaki?

Dokumentacja nie wydaje się być dokładnym wyjaśnieniem ani Czy dostarcza przykład, aby zademonstrować użycie min_df i / lub max_df. Czy ktoś mógłby podać wyjaśnienie lub przykład demonstrujący min_df lub max_df.

Author: Lucas Huang, 2014-12-30

4 answers

max_df jest używany do usuwania terminów, które pojawiają się zbyt często , znanych również jako"słowa stop specyficzne dla korpusu". Na przykład:

  • max_df = 0.50 oznacza " ignoruj terminy, które pojawiają się w więcej niż 50% dokumentów ".
  • max_df = 25 oznacza " ignoruj terminy, które pojawiają się w więcej niż 25 dokumentach ".

Domyślnym max_df jest 1.0, co oznacza " ignoruj terminy, które pojawiają się w więcej niż 100% dokumentów". Tak więc domyślne ustawienie nie ignoruje żadnych warunków.


min_df jest używany do usuwania terminów, które pojawiają się zbyt rzadko }. Na przykład:

  • min_df = 0.01 oznacza " ignoruj terminy, które pojawiają się w mniej niż 1% dokumentów ".
  • min_df = 5 oznacza " ignoruj terminy, które pojawiają się w mniej niż 5 dokumentach ".

Domyślnym min_df jest 1, co oznacza " ignoruj terminy, które pojawiają się w mniej niż 1 dokumencie ". Dlatego ustawienie domyślne nie ignoruje żadnych warunków.

 98
Author: Kevin Markham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 23:12:57

Zgodnie z CountVectorizer dokumentacją tutaj .

Używając float w zakresie [0.0, 1.0] odnoszą się one do dokumentu . Jest to odsetek dokumentów zawierających ten termin.

Przy użyciu int odnosi się do bezwzględnej liczby dokumentów, które posiadają ten termin.

Rozważ przykład, w którym masz 5 plików tekstowych (lub dokumentów). Jeśli ustawisz max_df = 0.6, to będzie to tłumaczyć 0.6*5=3 dokumenty. Jeśli ustawisz max_df = 2, to po prostu Przetłumacz do 2 dokumentów.

Poniższy przykład kodu źródłowego jest skopiowany z Github tutaj i pokazuje, w jaki sposób max_doc_count jest zbudowany z max_df. Kod min_df jest podobny i można go znaleźć na stronie GH.

max_doc_count = (max_df
                 if isinstance(max_df, numbers.Integral)
                 else max_df * n_doc)

Wartości domyślne dla min_df i max_df to odpowiednio 1 i 1.0. To w zasadzie mówi " jeśli mój termin znajduje się tylko w 1 dokumencie, to jest ignorowany. Podobnie jeśli znajduje się we wszystkich dokumentach (100% lub 1.0), to jest ignorowany."

max_df oraz {[9] } są używane wewnętrznie do obliczania max_doc_count i min_doc_count, maksymalnej i minimalnej liczby dokumentów, w których musi znaleźć się termin. To jest następnie przekazywane do self._limit_features jako argumenty słowa kluczowego high i low, odpowiednio, docstring dla self._limit_features wynosi

"""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.
"""
 11
Author: Ffisegydd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-30 18:21:17

Domyślne wartości min_df i max_df wynoszą odpowiednio 1 i 1.0. Te wartości domyślne naprawdę nic nie robią.

Biorąc to pod uwagę, uważam, że obecnie akceptowana odpowiedź przez @ Ffisegydd nie jest całkiem poprawna.

Na przykład, uruchom to używając wartości domyślnych, aby zobaczyć, że gdy min_df=1 i max_df=1.0, to

1) używane są wszystkie tokeny, które pojawiają się w co najmniej jednym dokumencie (np. wszystkie tokeny!)

2) wszystkie żetony pojawiające się we wszystkich dokumentach są używane (przetestujemy z jeden kandydat: wszędzie).

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_

Otrzymujemy:

[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([])

Wszystkie żetony są przechowywane. Nie ma żadnych zwrotów.

Dalsze używanie argumentów wyjaśni inne konfiguracje.

Dla zabawy i wglądu, polecam również bawić się stop_words = 'english' i widząc, że, osobliwie, wszystkie słowa z wyjątkiem "siedem" są usunięte! W tym "wszędzie".

 3
Author: Monica Heddneck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-18 19:59:08

Dodałbym ten punkt również dla lepszego zrozumienia min_df i max_df w tf-idf.

Jeśli wybierzesz wartości domyślne, czyli biorąc pod uwagę wszystkie terminy, wygenerujesz zdecydowanie więcej tokenów. Tak więc proces grupowania (lub jakiejkolwiek innej rzeczy, którą chcesz zrobić z tymi terminami później) zajmie więcej czasu.

Ale jakość twojego klastrowania nie powinna być zmniejszana.

Można by pomyśleć, że dopuszczenie do obecności wszystkich terminów (np. zbyt częstych terminów lub słów stop) może obniżyć jakość, ale w tf-idf tak nie jest. ponieważ pomiar TF-idf instynktownie da niski wynik tym terminom, skutecznie czyniąc je nie wpływowymi(jak to jest w wielu dokumentach).

Podsumowując, przycinanie terminów za pomocą min_df i max_df ma na celu poprawę wydajności, a nie Jakości klastrów (jako przykład).

I najważniejsze jest to, że jeśli ustawisz min i max błędnie, stracisz kilka ważnych terminów, a tym samym obniżysz jakość. Więc jeśli nie masz pewności co do właściwego progu (zależy to od zestawu dokumentów) lub jesteś pewien możliwości przetwarzania maszyny, opuść min, max parametry bez zmian.

 2
Author: Amirabbas Askary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-12 01:06:18