나는 scikit-learn의 Tfidf 변환기를 사용하여 "이상한"결과를 얻고 있습니다. 일반적으로, 저는 코퍼스의 모든 문서에서 idf가 0과 같음을 기대합니다 (아무런 평활화 또는 정규화를 사용하지 않음). 형식적으로는 문서의 수를 로그 할 것입니다. 코퍼스를 용어가 포함 된 문서 수로 나눈 것입니다. 분명히 (아래 그림과 같이) scikit-learn의 구현은 수동 구현과 비교하여 각 idf 값에 하나씩 추가합니다. 왜 아무도 알지 못해? 다시 말하지만, 평활화 및 정규화를 없음/거짓으로 설정했는지 확인하십시오.Scikit-learn TfidfTranformer가 잘못된 결과를 산출합니까?
In [101]: from sklearn.feature_extraction.text import TfidfTransformer
In [102]: counts
Out[102]:
array([[3, 0, 1],
[2, 0, 0],
[3, 0, 0],
[4, 0, 0],
[3, 2, 0],
[3, 0, 2]])
In [103]: transformer = TfidfTransformer(norm=None, smooth_idf=False)
In [104]: transformer
Out[104]:
TfidfTransformer(norm=None, smooth_idf=False, sublinear_tf=False,
use_idf=True)
In [105]: tfidf = transformer.fit_transform(counts)
In [106]: tfidf.toarray()
Out[106]:
array([[ 3. , 0. , 2.09861229],
[ 2. , 0. , 0. ],
[ 3. , 0. , 0. ],
[ 4. , 0. , 0. ],
[ 3. , 5.58351894, 0. ],
[ 3. , 0. , 4.19722458]])
In [107]: transformer.idf_
Out[107]: array([ 1. , 2.79175947, 2.09861229])
In [108]: idf1 = np.log(6/6)
In [109]: idf1
Out[109]: 0.0
In [110]: idf2 = np.log(6/1)
In [111]: idf2
Out[111]: 1.791759469228055
In [112]: idf3 = np.log(6/2)
In [113]: idf3
Out[113]: 1.0986122886681098
idf 값에 1을 더하는 것을 정당화 할 수있는 소스를 찾을 수 없었습니다. 저는 scikit-learn 버전 '0.14.1'을 사용하고 있습니다.
나는 scikit-learn보다 다른 솔루션이 그리 유용하지 않다. 그리드 검색을 위해 scikit-learn 파이프 라인을 만들어야하기 때문이다.