2017-08-08 37 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) 
相关问题