2012-03-13 4 views
3

문서의 Tf-idf 가중치를 찾은 다음 Naive
베이지안 분류자를 사용하여 텍스트를 분류하기 위해 scikit-learn을 사용하고 있습니다. 그러나 문서에서 모든 단어의 Tf-idf 가중치는 소수를 제외하고는 음수입니다. 그러나 내가 아는 한, 음의 값은 중요하지 않은 용어를 의미합니다. Bayesian 분류기에 전체 Tf-idf 값을 전달해야합니까? 우리가 그 중 일부만 전달할 필요가 있다면 어떻게 할 수 있습니까? 또한 linearSVC에 비해 Bayesian 분류기가 얼마나 좋거나 나쁘지는 요? Tf-idf를 사용하는 것보다 텍스트에서 태그를 찾는 더 좋은 방법이 있습니까?Python을 사용하는 Naive Bayes 분류 자 ​​

감사합니다.

답변

6

많은 질문이 있지만 도움을 제공해 드리겠습니다.

내가 아는 한 TF-IDF는 음수가 아니어야합니다. TF는 용어 빈도 (특정 문서에 용어가 나타나는 빈도) 및 문서 역 빈도 (해당 용어가 포함 된 문서 수/문서 수)입니다. 그 때 대개 로그 가중치가 적용됩니다. 우리는 종종 분모를 0으로 나누는 것을 피하기 위해 분모에 하나를 더합니다. 그러므로 음수 tf * idf를 얻는 유일한 시간은 해당 용어가 코퍼스의 모든 단일 문서에 나타나는 경우입니다 (이는 정보를 추가하지 않았기 때문에 언급 한대로 검색하는 데별로 도움이되지 않습니다). 알고리즘을 다시 한번 확인해 보겠습니다.

용어 t, 문서 D, 코퍼스 C 주어진 :

기계에서
tfidf = term freq * log(document count/(document frequency + 1)) 
tfidf = [# of t in d] * log([#d in c]/([#d with t in c] + 1)) 

순진 베이 즈 학습과 SVM을 모두 좋은 도구 - 내가했던 품질 응용 프로그램에 따라 다릅니다 및 프로젝트 위치를 자신의 정확도는 비교할만한 것으로 판명되었습니다. Naive Bayes는 일반적으로 손으로 쉽게 해킹하기 쉽습니다. SVM 라이브러리를 탐험하기 전에 먼저 그 장면을 촬영하겠습니다.

나는 뭔가를 놓칠지도 모르지만 나는 당신이 찾고있는 것을 정확하게 알고 있다고 확신하지 않습니다. 제 답변을 수정 해줘서 고맙습니다.

+0

먼저 빠른 응답을 보내 주셔서 감사합니다. 따라서 Tf-idf 값이 0보다 큰 단어를 태그로 사용할 수 있습니까? . – jvc

+0

또한 Bayes 분류 자에 대한 교육에 대한 의견은 무엇입니까? 전체 문서 Tf-idf를 사용하여이를 수행 할 필요가 있는가, 아니면 더 높은 Tf-idf 값을 갖는 단어의 Tf-idf 값만을 사용하여 수행 할 수 있는가? – jvc

+0

음, 문서의 대부분의 단어는 음수가 아니어야합니다. 당신의 코퍼스는 얼마나 큰가요? 분명히 실행하기 전에 "the", "an"등과 같은 stopwords를 제거하십시오. 태그로 무엇을 의미하는지 확신 할 수 없지만, 기능 또는 유사한 라벨을 의미하는 경우 좋은 접근이라고 생각합니다. – Chet

2

이 주제에서도 흥미 롭습니다. 내가 baes 분류를 사용할 때 (baes 알고리즘에 관한 러시아어 기사가 http://habrahabr.ru/blogs/python/120194/을 도울 수 있습니다.) 나는 문서의 20 단어만을 사용합니다. 나는 많은 가치를 시도했다. 내 최고 20 대 최고 결과를 얻으십시오. 또한 I이 평소 TF-IDF 변경 :

def f(word): 
    idf = log10(0.5/word.df) 
    if idf < 0: 
     idf = 0 
    return word.tf * idf 

을이 경우이 버그 마스터 지점에서 고정 된 0

+0

이것은 아마도이 문제를 회피 할 것입니다. @ogrisel은 의미가있는 버그가 있음을 지적합니다. 대부분의 단어는 음수가 아니어야합니다. – Chet

+0

흰 물방울이 아닙니다. 내 wieght 단어가 고전 tf-idf가 아니기 때문에. 그리고 그것 (idf)은 부정적 일 수 있습니다. – lavrton

+0

오, 그래, 다른 종류의 경우. – Chet

6

동일한 "나쁜 단어"wieght있다. text vectorizer API이 토큰 화를보다 쉽게 ​​사용자 정의 할 수 있도록 조금 변경되었습니다.

+0

Bayes 분류기의 값과 그 어휘를 Scikit에 저장하여 문서를 쉽게 분류 할 수 있습니까? – jvc

+0

세이빙 베이 분류기 란 트레이닝 세션 후에 단어 확률 가중치를 의미합니다. – jvc

+0

@ jvc : scikit-learn에서 전체 분류기 객체를 [pickle] (http://docs.python.org/library/pickle.html) 할 수 있습니다. –

관련 문제