2017-08-08 58 views
1

我正在Python中對一組文本數據執行文本聚類。基本上,我使用TF IDF得分,然後應用結果矩陣爲k均值算法就是這樣:Python中的文本聚類後的完全相同的羣集

vect = TfidfVectorizer(min_df=100,stop_words=sw) 

dtm = vect.fit_transform(df) 
l=vect.get_feature_names() 

k = 15 
model = MiniBatchKMeans(n_clusters=k) 
model.fit(dtm) 

order_centroids = model.cluster_centers_.argsort()[:, ::-1] 
terms = vect.get_feature_names() 
for i in range(k): 
     print("Cluster %d:" % i, end='') 
     for ind in order_centroids[i, :100]: 
      print(' %s' % l[ind], end='') 
     print() 

然後執行以下後,我得到15個相同的羣集(與它幾乎完全一致字計算)。我也嘗試使用LSA方法進行歸一化,但它幾乎相同。

我在做什麼錯,怎麼修復?

+1

你可以上傳數據?你也使用什麼版本的sklearn? – sera

回答

1

我的猜測是您的功能不是標準化的,這意味着dtm中的某些列包含以較高的均值爲中心的分佈。因此,用於提取羣集關聯功能的排序將錯誤地支持這些功能。

一種常見的做法,以避免此類問題是standardize的功能zero meanunit variance這樣的:

dtm_standardized = (dtm - dtm.mean(axis=0))/dtm.std(axis=0) 

或像這樣:

dtm_standardized = sklearn.preprocessing.scale(dtm) 
相關問題