2

약 1000 개의 댓글이 포함 된 내 CSV 파일에서 내 기능 벡터를 구축하려고합니다. 내 특성 벡터 중 하나는 scikit learn tfidf 벡터 라이저를 사용하는 tfidf입니다. 그것은 또한 특징 벡터로 카운트를 사용하는 것이 합리적입니까, 아니면 내가 사용해야하는 더 나은 특징 벡터가 있습니까?KMeans로 텍스트 클러스터링을위한 특징 벡터로 countvectorizer와 tfidfvectorizer를 모두 사용하는 것이 합리적입니까?

그리고 만약 내 기능으로 Countvectorizer와 tfidfvectorizer를 모두 사용한다면 결국 두 모델을 내 Kmeans 모델 (특히 km.fit() 부분)에 모두 적용해야합니까? 지금은 모델에 tfidf 특징 벡터 만 맞출 수 있습니다.

여기 내 코드입니다 :

vectorizer=TfidfVectorizer(min_df=1, max_df=0.9, stop_words='english', decode_error='ignore') 
vectorized=vectorizer.fit_transform(sentence_list) 

#count_vectorizer=CountVectorizer(min_df=1, max_df=0.9, stop_words='english', decode_error='ignore') 
#count_vectorized=count_vectorizerfit_transform(sentence_list) 

km=KMeans(n_clusters=num_clusters, init='k-means++',n_init=10, verbose=1) 
km.fit(vectorized) 

답변

4

기본적으로 당신이 (기능 엔지니어링) 텍스트 문서의 숫자 표현을 찾는하고 있습니다. 일부 문제에서는 카운트가 더 잘 작동하고 다른 일부에서는 tfidf 표현이 최선의 선택입니다. 둘 다 실제로 시도해야합니다. 두 표현은 매우 유사하므로 거의 동일한 정보를 전달하지만 전체 기능 집합 (tfidf + 개수)을 사용하면 더 나은 정확도를 얻을 수 있습니다. 이 기능 공간에서 검색하여 실제 모델에 더 가까이 다가 갈 수 있습니다.

이는 가로 기능을 쌓을 수있는 방법입니다 :

import scipy.sparse 

X = scipy.sparse.hstack([vectorized, count_vectorized]) 

그럼 당신은 그냥 할 수 있습니다 : 당신의 명확한 설명을위한

model.fit(X, y) # y is optional in some models 
+0

감사합니다! – jxn

+0

사실, 'y'가 정의되지 않았습니다. '라는 오류 메시지가 나타납니다. 'TypeError :'coo_matrix '객체에'__getitem __ '속성이 없습니다. – jxn

+0

hstack의 결과가 할당되어야합니다. (예 : scipy.sparse.hstack (vectorized, count_vectorized) X가 아닌 X, Y – elyase