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.
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.
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.
"""
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".
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.
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