programing

scikit 카운트 벡터라이저에서 min_df 및 max_df 이해

iphone6s 2023. 10. 9. 22:24
반응형

scikit 카운트 벡터라이저에서 min_df 및 max_df 이해

제가 Count Vectorizer에 입력한 텍스트 파일이 5개 있습니다.min_df그리고.max_dfCountVectorizer 인스턴스에 대한 최소/최대 문서 빈도는 정확히 무엇을 의미합니까?특정 텍스트 파일에서 단어의 빈도입니까, 아니면 전체 말뭉치(5개 텍스트 파일)에서 단어의 빈도입니까?

다음과 같은 경우에 다른 점은 무엇입니까?min_df그리고.max_df정수로 제공됩니까 아니면 부유물로 제공됩니까?

이 문서는 이 두 매개 변수의 사용을 설명하는 데 충분한 설명을 제공하지도 않고 예를 제공하지도 않는 것 같습니다.누군가가 설명을 제공하거나 예를 들어 설명해 줄 수 있습니까?min_df그리고.max_df?

max_df는 너무 자주 나타나는 용어를 제거하는 데 사용되며, 이를 "corpus별 중지 단어"라고도 합니다.예를 들어,

  • max_df = 0.50"문서의 50% 이상에서 나타나는 ignore 용어"를 의미합니다.
  • max_df = 25"25개 이상의 문서에 나타나는 ignore 용어"를 의미합니다.

max_df이다.1.0, "문서의 100% 이상에 나타나는 ignore 용어"를 의미합니다.따라서 기본 설정은 어떤 항도 무시하지 않습니다.


min_df너무 자주 나타나는 용어를 제거하는 데 사용됩니다.예를 들어,

  • min_df = 0.01"문서의 1% 미만에서 나타나는 ignore 용어"를 의미합니다.
  • min_df = 5"5개 미만의 문서에 나타나는 ignore 용어"를 의미합니다.

min_df이다.1, "1개 미만의 문서에 나타나는 ignore 용어"를 의미합니다.따라서 기본 설정은 어떤 항도 무시하지 않습니다.

에 대한 도 이 싶습니다.min_df그리고.max_dff -idf better에서.

모든 항을 고려할 때 기본값을 사용하면 토큰이 확실히 더 많이 생성된 것입니다.따라서 클러스터링 프로세스(또는 나중에 해당 조건으로 수행하려는 다른 작업)에 더 오랜 시간이 걸릴 수 있습니다.

그러나 클러스터링의 품질이 저하되어서는 안 됩니다.

사람들은 모든 용어(예: 너무 빈번한 용어 또는 정지 단어)를 사용하도록 허용하는 것이 품질을 저하시킬 수 있지만 tf-idfit에서는 그렇지 않다고 생각할 수 있습니다.왜냐하면 tf-idf 측정은 본능적으로 해당 항들에 낮은 점수를 주어 영향력이 없도록 효과적으로 만들기 때문입니다(많은 문서에 나와 있습니다).

요약하자면, 다음을 통해 조건을 가지치기 하는 것입니다.min_df그리고.max_df성능을 향상시키는 것이지 클러스터의 품질을 향상시키는 것은 아닙니다(예:

중요한 그 min그리고.max실수로 중요한 조건을 잃게 되어 품질이 떨어지게 됩니다.(문서 에 따라 처리 경우름나),름min,max변경되지 않은 매개 변수

CountVectorizer여기 서류가 있습니다.

에서 Float[0.0, 1.0]그들은 문서 빈도를 말합니다.이는 용어가 포함된 문서의 백분율입니다.

int를 사용할 때는 이 용어를 보유하는 문서의 절대 수를 나타냅니다.

텍스트 파일(또는 문서)이 5개인 경우를 예로 들어보겠습니다..max_df = 0.6그 다음에 그는 다음과 같이 해석될 것입니다.0.6*5=3문서.설정하면max_df = 2그러면 2개의 문서로 간단히 번역됩니다.

아래 소스 코드 예제는 여기 Github에서 복사한 것이고 어떻게 그 방법을 보여줍니다.max_doc_count됩니다로부터 됩니다.max_dfmin_df는 유사하며 GH 페이지에서 확인할 수 있습니다.

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

min_df그리고.max_df는 각각 1과 1.0 입니다.이것은 기본적으로 "한 문서에서만 내 용어가 발견되면 무시됩니다. 마찬가지로 모든 문서(100% 또는 1.0)에서 발견되는 경우에는 무시됩니다."

max_df그리고.min_df둘 다됩니다를 하는 데 됩니다.max_doc_count그리고.min_doc_count, 항을 찾아야 하는 문서의 최대 및 최소 개수입니다.그러면 키워드 인수로 전달됩니다.high그리고.low각,self._limit_features

"""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와 max_df의 기본값은 각각 1과 1.0입니다.이러한 기본값은 실제로 아무런 도움이 되지 않습니다.

그렇기는 하지만 현재 @Fisegydd 답변에서 받아들여지고 있는 답변은 정확하지 않다고 생각합니다.

를 들어,하여 이 때min_df=1그리고.max_df=1.0,그리고나서

1) 적어도 하나의 문서에 나타나는 모든 토큰이 사용됩니다(예: 모든 토큰!).

2) 모든 문서에 나타나는 모든 토큰이 사용됩니다(한 후보자와 함께 테스트합니다: everywhere).

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_

다음을 확인합니다.

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

모든 토큰은 보관됩니다.스톱워드가 없습니다.

그 논쟁을 더 만지작거리면 다른 구성이 명확해질 것입니다.

재미와 통찰력을 위해, 저는 또한 저와 함께 노는 것을 추천합니다.stop_words = 'english'그리고 특이하게도 '7'을 제외한 모든 단어들이 삭제된 것을 볼 때!'모든 곳'을 포함해서 말입니다.

목표는MIN_DF의미 있는 일이라고 생각되는 일이 거의 없는 단어들을 무시하는 것입니다.예를 들어, 텍스트에 1개 또는 2개의 문서에만 나타날 수 있는 사용자 이름이 있을 수 있습니다.일부 애플리케이션에서는 이를 소음으로 간주할 수 있으며 추가 분석에서 제거할 수도 있습니다.마찬가지로, 당신은 너무 흔한 단어들을 무시할 수 있습니다.MAX_DF.

단어를 제거하기 위해 최소/최대 용어 빈도(단어의 총 출현 횟수)를 사용하는 대신,MIN_DF그리고.MAX_DF문서 빈도로 더 잘 알려진 용어를 포함하는 문서 수를 살펴봅니다.임계값은 절대값(예: 1, 2, 3, 4)이거나 문서의 비율을 나타내는 값(예: 0.25 의미, 문서의 25%에 나타난 단어 무시)일 수 있습니다.

여기에서 몇 가지 사용 예를 참조하십시오.

방금 sklearn Count Vectorizer에 대한 설명서를 보았습니다.저는 이렇게 생각합니다.

일반 단어는 빈도 값이 더 높은 반면, 희귀 단어는 빈도 값이 더 낮습니다.주파수 값의 범위는 다음과 같습니다.0 - 1분수로

max_df는 주파수 값의 상한 값이며,min_df는 주파수 값의 하위 컷오프 값일 뿐입니다.

더 많은 일반적인 단어를 제거하고 싶다면, 우리는 다음과 같이 설정합니다.max_df0과 1 사이의 더 낮은 천장 값으로.만약 우리가 더 희귀한 단어들을 제거하고 싶다면, 우리는 다음과 같이 설정합니다.min_df ~ 0과 1합니다 의 더 값.우리는 모든 것을 사이에 두고 있습니다.max_df그리고.min_df.

이게 말이 되는지 확실하지 않아요.

언급URL : https://stackoverflow.com/questions/27697766/understanding-min-df-and-max-df-in-scikit-countvectorizer

반응형